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,请参阅此答案
好的,我已经投入了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)
Bat*_*nit 37
!对于FxCop 12.0/VS2013,请看这个答案 !!
先决条件:
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,但此时我不知道需要哪些.找出哪些是完全缺失的,这是非常棘手和耗时的.取决于您要构建的内容:
这些是我必须添加到源代码管理的文件:(请考虑这可能违反某些许可协议)
(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)
如果您的SonarQube质量配置文件中启用了任何FxCop规则,SonarQube需要FxCop 14.0.
这些步骤主要基于@BatteryBackupUnit 的优秀答案:
在构建计算机上安装Microsoft Build Tools 2015.
在构建计算机上安装Microsoft Visual C++ 2015 Redistributable Update 3,包括x86和x64.
在构建计算机上导入以下注册表文件(如果不是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)
将所有%programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools
(不仅仅是FxCop子目录)复制到构建计算机上的相同位置.
复制%programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis
到构建计算机上的相同位置.
从安装了VS2015的计算机的全局程序集缓存(C:\ Windows\Microsoft.NET\assembly\GAC_MSIL_NameOfTheAssembly_)中,复制Microsoft.VisualStudio.CodeAnalysis.dll
并Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
(确保DLL是版本14.0!).可以复制到C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis
构建计算机上,也可以安装到构建计算机的GAC中.
如果你看到Phx.FatalError
这一切之后-还有最后一个仪式...复制vs_profiler_x64_enu.exe
从Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Performance Tools\Setups
和构建机上安装它.
偏离@ BatteryBackupUnit的说明:
Static Analysis Tools
需要整个目录,而不仅仅是FxCop子目录.msdia120.dll
和amd64\msdia140.dll
文件复制到FxCop目录中.Custom.CodeAnalysis.targets
文件.先决条件:
\n\nSystem.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(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整个 FxCop 安装文件夹内容来自
\n\n%programfiles(x86)%\\Microsoft Visual Studio\\2017\\ **INSERT EDITION HERE** \\Team Tools\\Static Analysis Tools\\FxCop
来自 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\nmsdia140.dll (1.12 MiB)
\n\namd64\\msdia140.dll (1.42 MiB)
所有文件从%programfiles(x86)%\\\\Microsoft Visual Studio\\2017\\ **INSERT EDITION HERE** \\MSBuild\\Microsoft\\VisualStudio\\v15.0\\CodeAnalysis
到
Msbuild\\fxcoptask.dll
\n\nMsbuild\\Microsoft.CodeAnalysis.Targets
\n\nMsbuild\\Microsoft.VisualStudio.CodeAnalysis.dll
\n\nMsbuild\\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
另外,我调整了项目 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\nVisual Studio 安装路径取决于版本。它包括专业版和企业版。\nAFAIR 社区版有不同的路径,但也不支持 FxCop。欢迎指正:-)
\n 归档时间: |
|
查看次数: |
31217 次 |
最近记录: |