在构建代理上运行代码分析(FxCop> 10)而不安装Visual Studio

Bat*_*nit 56 .net msbuild continuous-integration fxcop build-server

在FxCop 10之后,Microsoft停止为FxCop发布单独的安装程序.在安装Visual Studio 2013/2015/2017之后,官方目前只能运行代码分析(FxCop 12.0/14.0/15.0).但是,我们坚持不在构建代理上安装Visual Studio(安装需要保留在 - 与我们在开发者计算机上获得的内容同步等).

那么我将如何让FxCop 12.0/14.0/15.0在构建代理上工作,最好不要安装其他任何东西?不过,我会接受为源代码控制添加一些二进制文件和msbuild文件.否则:有没有办法只使用Visual Studio 2013/2015/2017安装程序安装FxCop的东西?

注意:我们使用Teamcity作为构建服务器.

答案

由于特定环境和FxCop版本有多个有效答案,我可以自由地将它们链接到此处以便于访问:

Bat*_*nit 52

对于FxCop 14.0/VS2015,请参阅此答案


在不安装Visual Studio 2013的情况下运行FxCop 12.0

好的,我已经投入了6个小时,现在它正在运作.我已经为源代码控制添加了所有必需的可执行文件,dll和msbuild目标.

这些是我必须添加到源代码管理的文件:(请考虑这可能违反某些许可协议)

(source control)\dev\tools\FxCop
?
?[amd64]
?   ?
?   ?msdia120.dll
?[Engines]
?   ?
?   ?IntrospectionAnalysisEngine.dll
?   ?PhoenixAnalysisEngine.dll
?[Msbuild]
?   ?
?   ?fxcoptask.dll
?   ?Microsoft.CodeAnalysis.Targets
?   ?Microsoft.VisualStudio.CodeAnalysis.dll
?   ?Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
?[Repository]
?   ?
?   ?[Compatibility]
?   ?   ?
?   ?   ?Desktop2.0.xml
?   ?   ?Desktop2.0SP1.xml
?   ?   ?Desktop2.0SP2.xml
?   ?   ?Desktop3.0.xml
?   ?   ?Desktop3.0SP1.xml
?   ?   ?Desktop3.0SP2.xml
?   ?   ?Desktop3.5.xml
?   ?   ?Desktop3.5SP1.xml
?   ?system32.bin
?[Rules]
?   ?
?   ?DataflowRules.dll
?   ?DesignRules.dll
?   ?GlobalizationRules.dll
?   ?InteroperabilityRules.dll
?   ?MaintainabilityRules.dll
?   ?MobilityRules.dll
?   ?NamingRules.dll
?   ?PerformanceRules.dll
?   ?PortabilityRules.dll
?   ?ReliabilityRules.dll
?   ?SecurityRules.dll
?   ?SecurityTransparencyRules.dll
?   ?UsageRules.dll
?[Xml]
?   ?
?   ?CodeAnalysisReport.xsl
?   ?FxCopReport.xsl
?   ?VSConsoleOutput.xsl
?Architecture-msil.dll
?CodeAnalysis.dll
?CustomDictionary.xml
?FxCopCmd.exe
?FxCopCmd.exe.config
?FxCopCommon.dll
?FxCopSdk.dll
?Microsoft.Cci.dll
?Microsoft.VisualStudio.CodeAnalysis.Common.dll
?Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll
?Microsoft.VisualStudio.CodeAnalysis.dll
?Microsoft.VisualStudio.CodeAnalysis.Interop.dll
?Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll
?Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml
?msdia120.dll
?mssp7en.dll
?mssp7en.lex
?phx.dll
?Runtime-vccrt-win-msil.dll
Run Code Online (Sandbox Code Playgroud)

复制它们如下:

  • 整个FxCop安装文件夹的内容来自

    %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop

  • 从Visual Studio 2013 C++ redist或任何其他地方:(也参见法律信息)将msdia120 x86和x64复制到:

    msdia120.dll(874 KiB)

    amd64\msdia120.dll(1.07 MiB)

  • C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\安装了VS2013的计算机的全局程序集Cache()中,将以下DLL复制到:(确保DLL是版本12.0!)

    MSBUILD\Microsoft.VisualStudio.CodeAnalysis.dll

    MSBUILD\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • 所有的文件%programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis

    MSBUILD\fxcoptask.dll

    MSBUILD\Microsoft.CodeAnalysis.Targets

(此外,您需要适当的Windows(7.1/8.1)SDK来构建在构建代理上安装的.net 4.0/4.5应用程序)

另外,我们必须调整项目msbuild文件,如下所示:

<!--Must import code analysis target before importing csharp targets, so that the correct code analysis targets gets imported. -->
<Import Project="$(ProjectBuildScriptDir)Custom.CodeAnalysis.targets"/>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>
Run Code Online (Sandbox Code Playgroud)

这就是我们的Custom.CodeAnalysis.targets包含的内容:

  <PropertyGroup>
    <!-- Code analysis settings. -->
    <CodeAnalysisCulture>en-US</CodeAnalysisCulture>

    <!-- change this so it points to your ruleset or remove it entirely -->
    <CodeAnalysisRuleSet>$(SourcesDir)Custom.ruleset</CodeAnalysisRuleSet>

    <!-- this must refer to the source control directory where you copied FxCopCommand.exe (and the rest of the FxCop files and directories...) to -->
    <CodeAnalysisPath>$(ToolsDir)FxCop\</CodeAnalysisPath>

    <!-- this must refer to the source control directory where you copied fxcoptask.dll, Microsoft.CodeAnalysis.Targets, Microsoft.VisualStudio.CodeaAnalysis.dll and Microsoft.VisualStudio.CodeaAnalysis.Sdk.dll to -->
    <CodeAnalysisTargets>$(CodeAnalysisPath)Msbuild\Microsoft.CodeAnalysis.Targets</CodeAnalysisTargets>
  </PropertyGroup>
  <!-- configure this according to your wishes -->

  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
    <RunCodeAnalysis>true</RunCodeAnalysis>
  </PropertyGroup>

  <!-- Report code analysis results to TeamCity -->
  <Target Name="ReportCodeAnalysisResults" AfterTargets="RunCodeAnalysis" Condition="'$(RunCodeAnalysis)' == 'true' And '$(IsRunningOnTeamCity)' == 'true'">
    <Message Text="##teamcity[importData type='FxCop' path='$(CodeAnalysisLogFile)']" Importance="High" />
  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

  • 我们的构建服务器上出现以下错误:"无法加载文件或程序集'Microsoft.VisualStudio.CodeAnalysis.Interop.dll'或其依赖项之一." 即使上面答案中的所有指定文件都已复制.完整的错误消息可以在这里找到:http://pastebin.com/cJhjHYBZ解决方案是安装"Visual C++ Redistributable包为Visual Studio 2013" (3认同)

Bat*_*nit 37

!对于FxCop 12.0/VS2013,请看这个答案 !!

在不安装Visual Studio 2015的情况下运行FxCop 14.0

先决条件:

  • MSBuild 14.0 - >安装Microsoft Build Tools 2015
  • 用于Visual Studio 2015 x86的 Visual C++ Redistributable(总是需要x86版本,具体取决于构建x64 redist.如果缺少,则错误消息可能是神秘的,例如System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualStudio.CodeAnalysis.Interop.dll' or one of its dependencies. The specified module could not be found.).您可以单独复制必要的DLL,而不是安装整个redist,但此时我不知道需要哪些.找出哪些是完全缺失的,这是非常棘手和耗时的.

取决于您要构建的内容:

  • 适当的Windows SDK,例如Windows 10 SDK
  • 适当的.net SDK /目标(Windows 10 SDK中包含.NET Framework 4.6 SDK)

要添加到源代码管理的文件

这些是我必须添加到源代码管理的文件:(请考虑这可能违反某些许可协议)

(source control)\tools\FxCop14
?
?[Engines]
?   ?
?   ?IntrospectionAnalysisEngine.dll
?   ?PhoenixAnalysisEngine.dll
?[Msbuild]
?   ?
?   ?fxcoptask.dll
?   ?Microsoft.CodeAnalysis.Targets
?   ?Microsoft.VisualStudio.CodeAnalysis.dll
?   ?Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
?[Repository]
?   ?
?   ?[Compatibility]
?   ?   ?
?   ?   ?Desktop2.0.xml
?   ?   ?Desktop2.0SP1.xml
?   ?   ?Desktop2.0SP2.xml
?   ?   ?Desktop3.0.xml
?   ?   ?Desktop3.0SP1.xml
?   ?   ?Desktop3.0SP2.xml
?   ?   ?Desktop3.5.xml
?   ?   ?Desktop3.5SP1.xml
?   ?system32.bin
?[Rules]
?   ?
?   ?DataflowRules.dll
?   ?DesignRules.dll
?   ?GlobalizationRules.dll
?   ?InteroperabilityRules.dll
?   ?MaintainabilityRules.dll
?   ?MobilityRules.dll
?   ?NamingRules.dll
?   ?PerformanceRules.dll
?   ?PortabilityRules.dll
?   ?ReliabilityRules.dll
?   ?SecurityRules.dll
?   ?SecurityTransparencyRules.dll
?   ?UsageRules.dll
?[x64]
?   ?
?   ?msdia140.dll (1349 KB)
?[Xml]
?   ?
?   ?CodeAnalysisReport.xsl
?   ?FxCopReport.xsl
?   ?VSConsoleOutput.xsl
?Architecture-msil.dll
?CodeAnalysis.dll
?CustomDictionary.xml
?FxCopCmd.exe
?FxCopCmd.exe.config
?FxCopCommon.dll
?FxCopSdk.dll
?Microsoft.Cci.dll
?Microsoft.VisualStudio.CodeAnalysis.Common.dll
?Microsoft.VisualStudio.CodeAnalysis.DataflowModels.dll
?Microsoft.VisualStudio.CodeAnalysis.dll
?Microsoft.VisualStudio.CodeAnalysis.Interop.dll
?Microsoft.VisualStudio.CodeAnalysis.Phoenix.dll
?Microsoft.VisualStudio.CodeAnalysis.Phoenix.xml
?msdia140.dll (1057 KB)
?mssp7en.dll
?mssp7en.lex
?phx.dll
?Runtime-vccrt-win-msil.dll
Run Code Online (Sandbox Code Playgroud)

复制它们如下:

  • 整个FxCop安装文件夹的内容来自

    %programfiles(x86)%\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\FxCop

  • 从Visual Studio 2015 C++ redist或任何其他地方:(也可查看法律信息)将msdia140 x86和x64复制到:

    msdia140.dll(1057 KiB)

    amd64\msdia140.dll(1349 KiB)

  • C:\Windows\Microsoft.NET\assembly\GAC_MSIL\_NameOfTheAssembly_\安装了VS2015的计算机的全局程序集Cache()中,将以下DLL复制到:(确保DLL是版本14.0!)

    MSBUILD\Microsoft.VisualStudio.CodeAnalysis.dll

    MSBUILD\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • 所有的文件%programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis

    MSBUILD\fxcoptask.dll

    MSBUILD\Microsoft.CodeAnalysis.Targets

另外,我调整了项目msbuild文件(*.csproj),如下所示(提示:我稍微偏离了我之前使用VS2013的方式.这不是因为FxCop 14的工作原理不同,而是因为这样我可以将fxcop包括在内nuget包并使用.targets文件导入到.csproj的标准nuget功能):

<!-- Microsoft.CSharp.targets import is contained in csproj by default. This just goes to show the sequence -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"/>

<!-- now this must be added -->
<Import Project="$(ProjectBuildScriptDir)Custom.CodeAnalysis.targets"/>
Run Code Online (Sandbox Code Playgroud)

这就是我们的Custom.CodeAnalysis.targets包含的内容:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <!-- Code analysis settings. -->
    <PropertyGroup>
        <!-- this must reference the path where you copied the FxCop stuff to -->
        <FxCopDir>..\FxCop14\</FxCopDir> 
        <CodeAnalysisCulture>en-US</CodeAnalysisCulture>
        <CodeAnalysisRuleSet>$(SolutionDir)FxCop.ruleset</CodeAnalysisRuleSet>
        <!-- you can and should use another condition here. Otherwise code analysis will be run on every build in VS as well. -->
        <!-- in my build setup i do something like Condition=IsRunningOnTeamCity => true -->
        <RunCodeAnalysis>true</RunCodeAnalysis> 
        <CodeAnalysisTreatWarningsAsErrors Condition="'$(IsRunningOnTeamCity)' != 'true'">true</CodeAnalysisTreatWarningsAsErrors>
    </PropertyGroup>

    <Import Project="$(FxCopDir)Msbuild\Microsoft.CodeAnalysis.Targets" />

    <Target Name="CodeAnalysisLogHeader" BeforeTargets="RunCodeAnalysis" Condition="$(RunCodeAnalysis) == 'true'">
        <Message Text="Text, Executing Code Analysis (FxCop) on $(MsBuildProjectName)" Importance="High" />
    </Target>

    <!-- Report code analysis results to TeamCity -->
    <Target Name="ReportCodeAnalysisResults" AfterTargets="RunCodeAnalysis" Condition="$(RunCodeAnalysis) == 'true' AND '$(IsRunningOnTeamCity)' == 'true'">
        <Message Text="##teamcity[importData type='FxCop' path='$(MSBuildProjectDirectory)\$(CodeAnalysisLogFile)']" Importance="High" />
    </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

  • 是否有人对使用FxCop 14.0创建nuget包的源代码感兴趣,然后可以将其安装到项目中?由于许可限制我认为我不能发布包但我可以发布创建实际包所需的所有代码(然后你必须自己"托管"...) (4认同)
  • 找到它,安装vc ++但它必须是x86版本,因为Microsoft.VisualStudio.CodeAnalysis.Interop.dll只是x86. (2认同)

Pol*_*ick 8

使用FxCop进行SonarQube分析而无需安装Visual Studio

如果您的SonarQube质量配置文件中启用了任何FxCop规则,SonarQube需要FxCop 14.0.

这些步骤主要基于@BatteryBackupUnit 的优秀答案:

  1. 在构建计算机上安装Microsoft Build Tools 2015.

  2. 在构建计算机上安装Microsoft Visual C++ 2015 Redistributable Update 3,包括x86和x64.

  3. 在构建计算机上导入以下注册表文件(如果不是C :)则更新驱动器号:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WDExpress\14.0\Setup\EDev]
"StanDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\"
"FxCopDir"="C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Team Tools\\Static Analysis Tools\\FxCop\\"
Run Code Online (Sandbox Code Playgroud)
  1. 将所有%programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools(不仅仅是FxCop子目录)复制到构建计算机上的相同位置.

  2. 复制%programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis到构建计算机上的相同位置.

  3. 从安装了VS2015的计算机的全局程序集缓存(C:\ Windows\Microsoft.NET\assembly\GAC_MSIL_NameOfTheAssembly_)中,复制Microsoft.VisualStudio.CodeAnalysis.dllMicrosoft.VisualStudio.CodeAnalysis.Sdk.dll(确保DLL是版本14.0!).可以复制到C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis构建计算机上,也可以安装到构建计算机的GAC中.

如果你看到Phx.FatalError这一切之后-还有最后一个仪式...复制vs_profiler_x64_enu.exeProgram Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\Setups和构建机上安装它.

偏离@ BatteryBackupUnit的说明:

  1. Static Analysis Tools需要整个目录,而不仅仅是FxCop子目录.
  2. 您需要将它放在原始位置,而不是在FxCop下嵌套Msbuild子文件夹.
  3. 只要安装了Visual C++ 2015 Redistributable,就不必将文件msdia120.dllamd64\msdia140.dll文件复制到FxCop目录中.
  4. 没有与项目文件(*.csproj)相关的FxCop修改.
  5. 没有Custom.CodeAnalysis.targets文件.

  • 这种方法对我有用,只有一个变化.最初,代码分析报告错误:"MSBUILD CA0001:抛出类型'Phx.FatalError'的异常." 根据[这个答案](http://stackoverflow.com/a/32393322/107604),这是由于msdia140.dll没有注册 - 显然它还没有被VC++ 2015 Redist安装.从VS2015安装复制DLL(我使用"C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\DIA SDK\bin")并使用regsvr32注册它修复了问题. (2认同)

Bat*_*nit 3

在不安装 Visual Studio 2017 的情况下运行 FxCop 15.0

\n\n

先决条件:

\n\n
    \n
  • MSBuild 15.0 --> 安装Microsoft Build Tools 2017,您可能还想查看在这里看到
  • \n
  • 适用于 Visual Studio 2017 x86的 Visual C++ Redistributable \nor此处 带有 C++ 的 Visual Studio 2017。----注意:x86 版本始终是必需的,根据构建 x64 redist 可能也需要。如果缺少它,错误消息可能会很神秘,例如System.IO.FileNotFoundException: Could not load file or assembly \'Microsoft.VisualStudio.CodeAnalysis.Interop.dll\' or one of its dependencies. The specified module could not be found.)。您也可以单独复制必要的 DLL,而不是安装整个 redist,但此时我不知道需要哪些。找出哪些内容完全丢失是非常棘手且耗时的。
  • \n
\n\n

取决于您想要构建的内容:

\n\n
    \n
  • 适当的 Windows SDK,例如Windows 10 SDK
  • \n
  • 适当的.net SDK/目标(.NET Framework 4.6 SDK包含在Windows 10 SDK中)
  • \n
\n\n

要添加到源代码管理的文件

\n\n

这些是我必须添加到源代码管理的文件:\n(请考虑这可能违反某些许可协议)

\n\n
(source control)\\tools\\FxCop15\n\xe2\x94\x82\n\xe2\x94\x9c[Engines]\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9cIntrospectionAnalysisEngine.dll\n\xe2\x94\x82   \xe2\x94\x94PhoenixAnalysisEngine.dll\n\xe2\x94\x9c[Msbuild]\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9cfxcoptask.dll\n\xe2\x94\x82   \xe2\x94\x9cMicrosoft.CodeAnalysis.Targets\n\xe2\x94\x82   \xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.dll\n\xe2\x94\x82   \xe2\x94\x94Microsoft.VisualStudio.CodeAnalysis.Sdk.dll\n\xe2\x94\x9c[Repository]\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9c[Compatibility]\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop2.0.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop2.0SP1.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop2.0SP2.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop3.0.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop3.0SP1.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop3.0SP2.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9cDesktop3.5.xml\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94Desktop3.5SP1.xml\n\xe2\x94\x82   \xe2\x94\x94system32.bin\n\xe2\x94\x9c[Rules]\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9cDataflowRules.dll\n\xe2\x94\x82   \xe2\x94\x9cDesignRules.dll\n\xe2\x94\x82   \xe2\x94\x9cGlobalizationRules.dll\n\xe2\x94\x82   \xe2\x94\x9cInteroperabilityRules.dll\n\xe2\x94\x82   \xe2\x94\x9cMaintainabilityRules.dll\n\xe2\x94\x82   \xe2\x94\x9cMobilityRules.dll\n\xe2\x94\x82   \xe2\x94\x9cNamingRules.dll\n\xe2\x94\x82   \xe2\x94\x9cPerformanceRules.dll\n\xe2\x94\x82   \xe2\x94\x9cPortabilityRules.dll\n\xe2\x94\x82   \xe2\x94\x9cReliabilityRules.dll\n\xe2\x94\x82   \xe2\x94\x9cSecurityRules.dll\n\xe2\x94\x82   \xe2\x94\x9cSecurityTransparencyRules.dll\n\xe2\x94\x82   \xe2\x94\x94UsageRules.dll\n\xe2\x94\x9c[x64]\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x94msdia140.dll (1349 KB)\n\xe2\x94\x9c[Xml]\n\xe2\x94\x82   \xe2\x94\x82\n\xe2\x94\x82   \xe2\x94\x9cCodeAnalysisReport.xsl\n\xe2\x94\x82   \xe2\x94\x9cFxCopReport.xsl\n\xe2\x94\x82   \xe2\x94\x94VSConsoleOutput.xsl\n\xe2\x94\x9cArchitecture-msil.dll\n\xe2\x94\x9cCodeAnalysis.dll\n\xe2\x94\x9cCustomDictionary.xml\n\xe2\x94\x9cFxCopCmd.exe\n\xe2\x94\x9cFxCopCmd.exe.config\n\xe2\x94\x9cFxCopCommon.dll\n\xe2\x94\x9cFxCopSdk.dll\n\xe2\x94\x9cMicrosoft.Cci.dll\n\xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.Common.dll\n\xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.DataflowModels.dll\n\xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.dll\n\xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.Interop.dll\n\xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.Phoenix.dll\n\xe2\x94\x9cMicrosoft.VisualStudio.CodeAnalysis.Phoenix.xml\n\xe2\x94\x9cmsdia140.dll (1057 KB)\n\xe2\x94\x9cmssp7en.dll\n\xe2\x94\x9cmssp7en.lex\n\xe2\x94\x9cphx.dll\n\xe2\x94\x94Runtime-vccrt-win-msil.dll\n
Run Code Online (Sandbox Code Playgroud)\n\n

复制它们如下:

\n\n
    \n
  • 整个 FxCop 安装文件夹内容来自

    \n\n

    %programfiles(x86)%\\Microsoft Visual Studio\\2017\\ **INSERT EDITION HERE** \\Team Tools\\Static Analysis Tools\\FxCop

  • \n
  • 来自 Visual Studio 2017 C++ redist(或 Visual Studio 2017 安装,如果您安装了 VC++ 工作负载:%ProgramFiles(x86)%\\Microsoft Visual Studio\\2017\\\\VC\\Redist\\MSVC\ \14.12.25810)或任何其他地方:\n(另请参阅法律信息)将 msdia140 x86 和 x64(我的版本为 14.12.25810.0)复制到:

    \n\n

    msdia140.dll (1.12 MiB)

    \n\n

    amd64\\msdia140.dll (1.42 MiB)

  • \n
  • 所有文件从%programfiles(x86)%\\\\Microsoft Visual Studio\\2017\\ **INSERT EDITION HERE** \\MSBuild\\Microsoft\\VisualStudio\\v15.0\\CodeAnalysis

    \n\n

    Msbuild\\fxcoptask.dll

    \n\n

    Msbuild\\Microsoft.CodeAnalysis.Targets

    \n\n

    Msbuild\\Microsoft.VisualStudio.CodeAnalysis.dll

    \n\n

    Msbuild\\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll

  • \n
\n\n

另外,我调整了项目 msbuild 文件(*.csproj),如下所示:

\n\n
<!-- Microsoft.CSharp.targets import is contained in csproj by default. This just goes to show the sequence -->\n<Import Project="$(MSBuildToolsPath)\\Microsoft.CSharp.targets"/>\n\n<!-- now this must be added -->\n<Import Project="$(ProjectBuildScriptDir)Custom.CodeAnalysis.targets"/>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就是我们的 Custom.CodeAnalysis.targets 包含的内容:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\n\n    <!-- Code analysis settings. -->\n    <PropertyGroup>\n        <!-- this must reference the path where you copied the FxCop stuff to -->\n        <FxCopDir>..\\FxCop15\\</FxCopDir> \n        <CodeAnalysisCulture>en-US</CodeAnalysisCulture>\n        <CodeAnalysisRuleSet>$(SolutionDir)FxCop.ruleset</CodeAnalysisRuleSet>\n        <!-- you can and should use another condition here. Otherwise code analysis will be run on every build in VS as well. -->\n        <!-- in my build setup i do something like Condition=IsRunningOnTeamCity => true -->\n        <RunCodeAnalysis>true</RunCodeAnalysis> \n        <CodeAnalysisTreatWarningsAsErrors Condition="\'$(IsRunningOnTeamCity)\' != \'true\'">true</CodeAnalysisTreatWarningsAsErrors>\n    </PropertyGroup>\n\n    <Import Project="$(FxCopDir)Msbuild\\Microsoft.CodeAnalysis.Targets" />\n\n    <Target Name="CodeAnalysisLogHeader" BeforeTargets="RunCodeAnalysis" Condition="$(RunCodeAnalysis) == \'true\' OR $(RunCodeAnalysisOnce) == \'true\'">\n        <Message Text="Text, Executing Code Analysis (FxCop) on $(MsBuildProjectName)" Importance="High" />\n    </Target>\n\n</Project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

Visual Studio 路径注意事项:

\n\n

Visual Studio 安装路径取决于版本。它包括专业版和企业版。\nAFAIR 社区版有不同的路径,但也不支持 FxCop。欢迎指正:-)

\n