Запуск анализа кода (FxCop> 10) на агенте сборки без установки Visual Studio
после FxCop 10 Microsoft прекратила доставку отдельного установщика для FxCop. Официально в настоящее время можно запускать только анализ кода (FxCop 12.0 / 14.0 / 15.0) после установки Visual Studio 2013 / 2015 / 2017. Тем не менее, мы непреклонны в том, чтобы не устанавливать Visual Studio на агенты сборки (установка должна быть синхронизирована с тем, что у нас есть на компьютерах разработчиков и т. д.).
Итак, как бы я идти о получении FxCop 12.0 / 14.0 / 15.0 для работы агента построения , предпочтительно без установки чего-либо еще? Однако я бы согласился добавить несколько двоичных файлов и файлов msbuild в систему управления версиями. В противном случае: есть ли способ установить только материал FxCop с помощью Visual Studio 2013 / 2015 / 2017 установщик?
Примечание: мы используем Teamcity в качестве сервера сборки.
ответы
поскольку существует несколько допустимых ответов для конкретных сред и версий FxCop, я взял на себя смелость связать их здесь для облегчения доступ:
- FxCop 15.0 (Visual Studio 2017)
- FxCop 14.0 (Visual Studio 2015)
- FxCop 12.0 (Visual Studio 2013)
- SonarQube
5 ответов:
на FxCop 14.0 / VS2015 см. ответ
запустите FxCop 12.0 без установки Visual Studio 2013
ладно, я вложил 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
копировать их следующим образом:
все содержимое папки установки 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, скопируйте следующие библиотеки 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.Цели
(кроме того, вам потребуется соответствующий 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"/>
и это то, что наш обычай.CodeAnalysis.цели содержит:
<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>
!! Ибо FxCop 12.0 / VS2013 см. ответ !!
запустите FxCop 14.0 без установки Visual Studio 2015
требования:
- MSBuild 14.0 -- > Install Microsoft Build Tools 2015
- Visual C++ распространяемый для Visual Studio 2015 x86 (версия 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.
). Вместо установки всего redist вы также можете скопировать необходимые DLL отдельно, но на данный момент я не знаю, какие из них необходимы. Это довольно сложно и отнимает много времени, чтобы выяснить, какие из них точно отсутствует.в зависимости от того, что вы хотите построить:
- соответствующий Windows SDK, например Windows 10 SDK
- соответствующий .NET SDK / targets (.NET Framework 4.6 SDK входит в Windows 10 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
копировать их следующим образом:
все содержимое папки установки 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, скопируйте следующие библиотеки 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.Цели
дополнительно я настроил файл проекта msbuild (*.csproj) следующим образом (подсказка: я немного отклоняюсь от того, как я ранее делал это с VS2013. Это не потому что FxCop 14 работает по-другому, а скорее потому, что таким образом я могу включить fxcop в пакет nuget и использовать стандартную функциональность nuget .цели импорта файлов .csproj):
<!-- 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"/>
и это то, что наш обычай.CodeAnalysis.цели содержит:
<?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>
использование FxCop для анализа SonarQube без установки Visual Studio
если в вашем профиле качества SonarQube включены какие-либо правила FxCop, для SonarQube требуется FxCop 14.0.
эти шаги в значительной степени основаны на выдающихся ответ by @BatteryBackupUnit:
установить Microsoft Build Tools 2015 на машине построения.
установить Microsoft Visual C++ 2015 Распространяемое Обновление 3, как x86, так и x64, на машине сборки.
импортируйте следующий файл реестра (обновите букву диска, если не C:) на машине сборки:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WDExpress.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\"
скопировать все
%programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools
(не только подкаталог FxCop) в том же месте на машине сборки.скопировать
%programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis
к тому же месту на сборке машина.из глобального кэша сборок (C:\Windows\Microsoft.NET\assembly\GAC_MSIL_NameOfTheAssembly_) компьютера, на котором установлен VS2015, скопируйте
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.- вместо вложения вложенной папки Msbuild в FxCop вам нужно поместить ее в исходное местоположение.
- копирование
msdia120.dll
иamd64\msdia140.dll
файлы в каталог FxCop кажутся ненужными до тех пор, пока установлен распространяемый Visual C++ 2015.- нет Изменения, связанные с FxCop в файле проекта (*.csproj).
- нет .
запустите FxCop 15.0 без установки Visual Studio 2017
требования:
- MSBuild 15.0 -- > Install Microsoft Build Tools 2017, вы также можете посмотреть здесь
- Visual C++ распространяемый для Visual Studio 2017 x86 или здесьили Visual Studio 2017 с C++. ---- Примечание: всегда требуется версия 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.
). Вместо установки всего redist вы также можете скопировать необходимые DLL отдельно, но на данный момент я не знаю, какие из них необходимы. Это довольно сложно и отнимает много времени, чтобы выяснить, какие из них точно отсутствует.в зависимости от того, что вы хотите построить:
- соответствующий Windows SDK, например Windows 10 SDK
- соответствующий .показатели по чистой СДК / (.Net фреймворк 4.6 SDK включен в пакет SDK для Windows 10)
файлы для добавления в систему управления версиями
это файлы, которые я должен был добавить в систему управления версиями: (Пожалуйста, учтите, что это может нарушить некоторые лицензионные соглашения)
(source control)\tools\FxCop15 │ ├[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
копировать их следующим образом:
все содержимое папки установки FxCop от
%programfiles(x86)%\Microsoft Visual Studio17\ **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) или в любом другом месте: (Также см. правовая информация) скопируйте msdia140 x86 и x64 (у меня есть версия 14.12.25810.0) в:
msdia140.dll (1.12 MiB)
amd64\msdia140.dll (1.42 MiB)
все файлы из
%programfiles(x86)%\Microsoft Visual Studio17\ **INSERT EDITION HERE** \MSBuild\Microsoft\VisualStudio\v15.0\CodeAnalysis
доMsbuild\fxcoptask.dll
Msbuild\Microsoft.CodeAnalysis.Цели
Msbuild\Microsoft.VisualStudio.CodeAnalysis.dll
Msbuild\Microsoft.VisualStudio.CodeAnalysis.пакет SDK.dll
дополнительно я настроил файл проекта msbuild (*.csproj файл) следующим образом:
<!-- 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"/>
и это то, что наш обычай.CodeAnalysis.цели содержит:
<?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>..\FxCop15\</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' OR $(RunCodeAnalysisOnce) == 'true'"> <Message Text="Text, Executing Code Analysis (FxCop) on $(MsBuildProjectName)" Importance="High" /> </Target> </Project>
примечания для путей Visual Studio:
путь к установке visual studio зависит от версии. Оно включает профессионала и предпринимательство. AFAIR community edition имеет другой путь, но также не поддерживает FxCop. Исправления приветствуются :-)
есть очень простой способ для TFS:
на машине сборки добавьте переменную окружения:
FXCOPDIR
на:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop
(просто скопируйте эту папку с Вашего компьютера dev).в этом каталоге есть файл под названием:
FxCopCmd.exe
и TFS Build заберет его автоматически, даже если vs не установлен. Возможно, вам придется повторно загрузить сервер один или два раза, но сборка в конечном итоге будет работать. Вам также нужно будет убедиться, что на компьютере установлены две библиотеки DLL глобальный кэш сборок: Microsoft.VisualStudio.CodeAnalysis.dll и Microsoft.VisualStudio.CodeAnalysis.пакет SDK.файл DLL Первый из них можно найти в пути, упомянутом выше, но последний, единственный способ, которым я получил его, - это то, что я схватил его из gac на моей машине dev. (вы можете отключить специальный вид папки gac, изменив реестр, просто google it).