Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 在Microsoft Visual Studio 2012中禁用解决方案级别的代码分析_Visual Studio 2012 - Fatal编程技术网

Visual studio 2012 在Microsoft Visual Studio 2012中禁用解决方案级别的代码分析

Visual studio 2012 在Microsoft Visual Studio 2012中禁用解决方案级别的代码分析,visual-studio-2012,Visual Studio 2012,在我们的产品中,大约有400个项目,所以在VS 2012中,如果我想进行构建,那么它会为所有400个项目生成代码分析,并且我不能手动禁用每个项目的代码分析。因此,我正在寻找一种机制,它可以禁用整个解决方案(所有项目)的代码分析,而不是将这些设置应用于单个项目。不确定VS2012是否有一种简单的方法。代码分析是在项目级别定义的,取决于您的构建配置。例如,版本中没有代码分析 首先,尝试创建基于发布的配置 另一个解决方案(但非常糟糕)可能是运行批处理来修改所有项目文件 下面是一个示例项目文件(检查名为

在我们的产品中,大约有400个项目,所以在VS 2012中,如果我想进行构建,那么它会为所有400个项目生成代码分析,并且我不能手动禁用每个项目的代码分析。因此,我正在寻找一种机制,它可以禁用整个解决方案(所有项目)的代码分析,而不是将这些设置应用于单个项目。

不确定VS2012是否有一种简单的方法。代码分析是在项目级别定义的,取决于您的构建配置。例如,版本中没有代码分析

首先,尝试创建基于发布的配置

另一个解决方案(但非常糟糕)可能是运行批处理来修改所有项目文件

下面是一个示例项目文件(检查名为RunCodeAnalysis的元素):


真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
假的
pdbonly
真的
bin\Release\
痕迹
促使
4.

您可以编写一个小型控制台应用程序,从解决方案文件中读取所有项目文件,然后切换每个项目的Xml节点

用于从解决方案中获取项目文件的函数:


您可以使用一个小技巧来禁用整个VisualStudio实例的静态代码分析,如下所述。简言之:

  • 打开VS2012的开发者命令提示符
  • 类型
    set DevDivCodeAnalysisRunType=已禁用
  • 键入
    devenv
    启动Visual Studio

同样的解决方案也适用于Visual Studio 2015,通过VS2015的开发者命令提示符

您可以使用Nuget的Package Manager控制台窗口来实现这一点

在名为“NuGet_profile.ps1”的目录“C:\Users{your user}\Documents\WindowsPowerShell”中创建一个新的文本文件,并添加以下代码:

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);
}
重新启动VisualStudio。单击菜单“查看”|“其他窗口”|“软件包管理器控制台”。现在,您可以执行以下命令:

> Enable-CodeAnalysis
> Disable-CodeAnalysis

要禁用特定项目的代码分析,请执行以下操作:-

  • 在项目上单击鼠标右键,选择“属性”
  • 在属性页面上选择代码分析
  • 取消选中“在生成时启用代码分析”复选框

  • 所有这些项目都在一个解决方案中吗?是的,因为我们还将单元测试用例与它们结合在一起。对于framework 3.5,文件中有一个名为“Microsoft.Common.targets”的选项,即RunCodeAnalysis(可以设置为False),但对于framework 4.0,没有这样的选项……大约10秒左右,因为VS2012现在快多了。但是,你能提供一些关于禁用所有项目的代码分析的信息吗?十秒钟?我不相信你。在任何情况下,我认为其他答案都是正确的:没有办法做到这一点。谢谢回答。。。但我知道在项目级别的更改,但我想在解决方案级别禁用相同的更改,或者说在一个设置中对所有项目禁用相同的更改。。。
    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);
    }
    
    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);
    }
    
    > Enable-CodeAnalysis
    > Disable-CodeAnalysis