2013-01-28 8 views
9

W naszym produkcie jest około 400 projektów, więc w VS 2012, jeśli chcę utworzyć kompilację, generuje ona analizę kodu dla wszystkich 400 projektów i nie mogę ręcznie wyłącz analizę kodu dla każdego projektu. Dlatego szukam mechanizmu, który wyłącza analizę kodu dla całego rozwiązania (wszystkich projektów), a następnie stosuje te ustawienia do poszczególnych projektów.Wyłącza analizę kodu na poziomie rozwiązania w Microsoft Visual Studio 2012

+0

Czy wszystkie te projekty znajdują się w jednym rozwiązaniu? –

+0

Tak, ponieważ mamy również połączone z nimi testy jednostkowe. – Nirav31

+0

400 projektów w jednym rozwiązaniu jest zbyt wiele. –

Odpowiedz

4

Nie wiesz, czy jest to łatwe z VS2012. CodeAnalysis jest definiowana na poziomie projektu i zależy od konfiguracji kompilacji. Na przykład w wersji Release nie ma analizy kodu.

Najpierw spróbuj utworzyć konfigurację na podstawie wydania.

Innym rozwiązaniem (ale bardzo złym) może być uruchomienie partii w celu zmodyfikowania wszystkich plików projektu.

Oto plik przykładowy projekt (sprawdź element o nazwie RunCodeAnalysis):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    <RunCodeAnalysis>false</RunCodeAnalysis> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
    <ItemGroup> 
+0

Dzięki za odpowiedź ... !!! ... Ale znam zmiany na poziomie projektu, ale chcę wyłączyć to samo na poziomie rozwiązania lub powiedzieć dla wszystkich projektów w jednym ustawieniu lub tak ... – Nirav31

3

można napisać aplikację konsoli mało który czyta wszystkie pliki projektu z pliku roztwór, a następnie przełączać XML Węzeł każdego projektu.

Funkcja uzyskać pliki projektu z roztworu:

public IEnumerable<string> Parse(string solutionFile) 
{ 
    if (solutionFile == null) 
     throw new ArgumentNullException("solutionFile"); 

    if (!File.Exists(solutionFile)) 
     throw new FileNotFoundException("Solution file does not exist", solutionFile); 

    var projectFiles = new List<string>(); 

    using (var reader = new StreamReader(solutionFile, true)) 
    { 
     while (!reader.EndOfStream) 
     { 
      var line = reader.ReadLine(); 
      if (line == null) 
       continue; 

      line = line.TrimStart(); 
      if (!line.StartsWith("Project(", StringComparison.OrdinalIgnoreCase)) 
       continue; 

      var projectData = line.Split(','); 
      var projectFile = projectData[1].Trim().Trim('"'); 
      if (!string.IsNullOrEmpty(Path.GetExtension(projectFile))) 
       projectFiles.Add(projectFile); 
     } 
    } 

    return projectFiles; 
} 

a funkcja aby przełączyć węzeł (y) RunCodeAnalysis:

public void ToggleCodeAnalysis(string projectFile) 
{ 
    if (projectFile == null) 
     throw new ArgumentNullException("projectFile"); 

    if (!File.Exists(projectFile)) 
     throw new FileNotFoundException("Project file does not exist", projectFile); 

    var xmlDocument = new XmlDocument(); 
    xmlDocument.Load(projectFile); 

    var namespaceManager = new XmlNamespaceManager(xmlDocument.NameTable); 
    namespaceManager.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); 

    var nodes = xmlDocument.SelectNodes("//ns:RunCodeAnalysis", namespaceManager); 
    if (nodes == null) 
     return; 

    var hasChanged = false; 
    foreach (XmlNode node in nodes) 
    { 
     bool value; 
     if (!Boolean.TryParse(node.InnerText, out value)) 
      continue; 

     node.InnerText = value ? "false" : "true"; 
     hasChanged = true; 
    } 

    if (!hasChanged) 
     return; 

    xmlDocument.Save(projectFile); 
} 
24

Można użyć trochę trik, aby wyłączyć analizę statycznego kodu dla całej instancji Visual Studio zgodnie z opisem here. W skrócie:

  • Otwórz Developer Command Prompt for VS2012
  • typ set DevDivCodeAnalysisRunType=Disabled
  • typ devenv zacząć Visual Studio

samo rozwiązanie działa dla Visual Studio 2015 za pośrednictwem Developer Command Prompt for VS2015.

+0

To jest świetne! Nie wiedziałem o tej "funkcji". – Vlad

+0

Wygląda na to, że działa dobrze. Świetne rozwiązanie. – ElConrado

4

W tym celu można użyć okna konsoli menedżera pakietów Nuget.

Utwórz nowy plik tekstowy w katalogu "C: \ Users {Twój user} \ Documents \ WindowsPowerShell" o nazwie "NuGet_profile.ps1" i dodaj następujący kod:

function Disable-CodeAnalysis(){ 
    ForEach ($project in $dte.Solution.Projects) { 
    Set-CodeAnalysis($project, $false) 
    } 
} 

function Enable-CodeAnalysis(){ 
    ForEach ($project in $dte.Solution.Projects) { 
    Set-CodeAnalysis($project, $true) 
    } 
} 

function Set-CodeAnalysis($project, $value){ 
    $projectName = $project.Name 
    $projectFilePath = $project.FullName 
    if ([System.String]::IsNullOrWhiteSpace($projectFilePath)){ 
    if($proj.Kind -eq "{66A26720-8FB5-11D2-AA7E-00C04F688DDE}"){ 
     ForEach ($item in $proj.ProjectItems) { 
     if($item.SubProject -ne $null){ 
      Set-CodeAnalysis($item.SubProject, $value) 
     } 
     } 
    } 
    continue; 
    } 
    $xmlDocument = new-object System.Xml.XmlDocument 
    $action = "Enable" 
    if($value -ne $true){ 
    $action = "Disable" 
    } 

    Write-Host "$action code analysis for $projectName at $projectFilePath" 
    $xmlDocument.Load([string]$projectFilePath); 

    $namespaceManager = new-object System.Xml.XmlNamespaceManager($xmlDocument.NameTable); 
    $namespaceManager.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); 

    $nodes = $xmlDocument.SelectNodes("//ns:RunCodeAnalysis", $namespaceManager); 
    if ($nodes -eq $null){ 
    continue; 
    } 
    foreach ($node in $nodes){ 
    $node.InnerText = "$value"; 
    } 
    $xmlDocument.Save($projectFilePath); 
} 

Restart Visual Studio. Kliknij menu "Widok" | "Inne okna" | "Konsola menedżera pakietów". Teraz można wykonać następujące polecenia:

> Enable-CodeAnalysis 
> Disable-CodeAnalysis 
0

Aby wyłączyć analizy kodu dla konkretnego projektu: -

  1. Kliknij prawym przyciskiem myszy na projekcie, wybierz Właściwości.
  2. Na stronie właściwości wybierz Analiza kodu.
  3. Odznacz pole wyboru "Włącz analizę kodu podczas kompilacji".
Powiązane problemy