Запуск анализа кода (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, я взял на себя смелость связать их здесь для более легкого доступа:


person BatteryBackupUnit    schedule 12.02.2014    source источник
comment
Ненавижу все, что предлагает установить Visual Studio на машину сборки. бу майкрософт.   -  person granadaCoder    schedule 12.02.2014


Ответы (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 ++ или в любом другом месте: (также см. юридическая информация) скопируйте msdia120 x86 и x64 в:

    msdia120.dll (874 КБ)

    amd64 \ msdia120.dll (1,07 МБ)

  • из глобального кэша сборок (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.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"/>

И вот что содержит наш 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>
person BatteryBackupUnit    schedule 12.02.2014
comment
Спасибо, что поделился, очень признателен - person SteveC; 28.03.2014
comment
На нашем сервере сборки возникла следующая ошибка: не удалось загрузить файл или сборку Microsoft.VisualStudio.CodeAnalysis.Interop.dll или одну из ее зависимостей. даже если все указанные файлы в ответе выше были скопированы. Полное сообщение об ошибке можно найти здесь: pastebin.com/cJhjHYBZ Решение заключалось в установке распространяемых пакетов Visual C ++ для Visual Studio 2013 - person salle55; 29.09.2014
comment
@ salle55, не могли бы вы убедиться, что вы скопировали msdia120.dll в правильное место и правильную версию (x86 против x64)? Насколько я знаю, это единственная необходимая dll из VC ++ Redist 2013. Если вы используете x86, не копируйте его в папку amd64. - person BatteryBackupUnit; 30.09.2014
comment
Теперь я безуспешно пытаюсь сделать то же самое с FxCop 14 (из VS2015). получать Could not load file or assembly 'Microsoft.VisualStudio.CodeAnalysis.Interop.dll' or one of its dependencies. все время. Пробовал устанавливать .Sdk на GAC, даже .Interop на gac - ничего не помогает. Трассировка показывает Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information., но вы не можете добраться до LoaderExceptions без подключенного отладчика. - person justmara; 18.08.2015
comment
@justmara Я подозреваю, что для этого потребуются библиотеки DLL Visual C ++ Redistributable для Visual Studio 2015. Можете установить и проверить, работает ли? Пожалуйста, также опубликуйте свои результаты, чтобы я мог обновить ответ. Если это не сработает, скорее всего, это означает, что FXCop 14 состоит из большего количества dll (которые также необходимо скопировать). - person BatteryBackupUnit; 18.08.2015
comment
@justmara см. здесь для получения обновленного ответа о FxCop 14.0 - person BatteryBackupUnit; 19.08.2015
comment
@BatteryBackupUnit Ссылка msdn.microsoft.com/en-us/vstudio/dn501987 не работает, не могли бы вы предоставить обновленную ссылку - person Venkat; 06.07.2017

!! Для FxCop 12.0 / VS2013 см. этот ответ !!

Запустите FxCop 14.0 без установки Visual Studio 2015

Предпосылки:

  • MSBuild 14.0 -> Установить Microsoft Build Tools 2015
  • Распространяемый компонент Visual C ++ для Visual Studio 2015 x86 (всегда требуется версия x86, в зависимости от сборки также может потребоваться повторный список x64. Если она отсутствует, сообщение об ошибке может быть загадочным, например 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 / цели (.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 ++ или в любом другом месте: (также см. юридический информация) скопируйте msdia140 x86 и x64 в:

    msdia140.dll (1057 КБ)

    amd64 \ msdia140.dll (1349 КБ)

  • из глобального кэша сборок (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.Targets

Кроме того, я скорректировал файл msbuild проекта (* .csproj) следующим образом (Подсказка: я немного отклоняюсь от того, как я раньше делал это с VS2013. Это не потому, что FxCop 14 работает по-другому, а скорее потому, что таким образом я могу включить fxcop с помощью nuget и используйте стандартные функции nuget для импорта файла .targets в .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"/>

И вот что содержит наш 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>
person BatteryBackupUnit    schedule 19.08.2015
comment
Кого-нибудь интересует исходный код для создания пакета nuget с FxCop 14.0, который затем можно установить в проекты? Из-за лицензионных ограничений я думаю, что не могу опубликовать пакет, но я мог бы опубликовать весь код, необходимый для создания фактического пакета (который вам затем придется разместить самостоятельно ...) - person BatteryBackupUnit; 19.08.2015
comment
Я закончил тем, что установил vc ++ redist на машине сборки. Я сделал файл .proj, который копирует все необходимые файлы и устанавливает vc ++ redist просто так: <ItemGroup> <FxCopLibs Include="$(MSBuildThisFileDirectory)lib\**\*.*" /> </ItemGroup> <Exec Command="vc_redist.x86.exe /q /norestart" WorkingDirectory="$(FxCopFolder)" /> - person justmara; 20.08.2015
comment
Не удается заставить его работать после выполнения описанных выше действий. Я не использую цель FxCop msbuild, а напрямую вызываю FxCopCmd.exe. 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. Есть идеи? - person Jochen; 29.09.2015
comment
Нашел его, установив vc ++, но это должна была быть версия x86, потому что Microsoft.VisualStudio.CodeAnalysis.Interop.dll - это только x86. - person Jochen; 29.09.2015
comment
@Jochen Спасибо. Я улучшил формулировку, чтобы сделать более ясным, что x86 нужен всегда. - person BatteryBackupUnit; 29.09.2015
comment
Примечание: предоставленная ссылка с надписью Распространяемый компонент Visual C ++ для Visual Studio 2015 x86 автоматически загружает версию x64. Вам необходимо отменить автоматическую загрузку и нажать Если загрузка не начнется через 30 секунд, нажмите здесь и выберите версию x86. - person Kobi; 20.10.2016

Использование 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\\"
  1. Скопируйте все %programfiles(x86)%\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools (а не только подкаталог FxCop) в то же место на машине сборки.

  2. Скопируйте %programfiles(x86)%\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis в то же место на сборочной машине.

  3. Из глобального кэша сборок (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:

  1. Требуется весь каталог Static Analysis Tools, а не только подкаталог FxCop.
  2. Вместо того, чтобы вкладывать подпапку Msbuild в FxCop, вам нужно поместить ее в исходное место.
  3. Копирование файлов msdia120.dll и amd64\msdia140.dll в каталог FxCop кажется ненужным, если установлен распространяемый компонент Visual C ++ 2015.
  4. Никаких модификаций файла проекта (* .csproj), связанных с FxCop.
  5. Нет Custom.CodeAnalysis.targets файла.
person PolyTekPatrick    schedule 09.06.2016
comment
Этот подход сработал для меня с одним изменением. Первоначально анализ кода сообщал об ошибках: MSBUILD CA0001: было выброшено исключение типа «Phx.FatalError». Согласно этому ответу, это произошло из-за того, что msdia140.dll не был зарегистрирован - по-видимому, он не был установлен VC ++ 2015 Redist . Копирование DLL из установки VS2015 (я использовал C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ DIA SDK \ bin) и регистрация в regsvr32 устранили проблему. - person Sergii Volchkov; 16.06.2016
comment
У меня это сработало, но мне пришлось скопировать% programfiles (x86)% \ Microsoft Visual Studio 14.0 \ Team Tools \ Static Analysis (версия 14.0, а не 12.0). У меня также была проблема с Phx.FatalError, вызванная отсутствием msdia140.dll - person Jf Beaulac; 17.02.2017

Запустите FxCop 15.0 без установки Visual Studio 2017

Предпосылки:

  • MSBuild 15.0 -> Установите Инструменты сборки Microsoft 2017 г., возможно, вы также захотите увидеть здесь
  • Распространяемый компонент Visual C ++ для Visual Studio 2017 x86 или здесь ИЛИ Visual Studio 2017 с C ++. ---- Примечание: всегда требуется версия x86, в зависимости от сборки также может потребоваться повторный запуск x64. Если он отсутствует, сообщение об ошибке может быть загадочным, например 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 / цели (.NET Framework 4.6 SDK включен в Windows 10 SDK)

Файлы для добавления в систему контроля версий

Это файлы, которые мне пришлось добавить в систему управления версиями: (Учтите, что это может нарушить некоторые лицензионные соглашения)

(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 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) или любой другой место: (также см. правовую информацию) скопируйте msdia140 x86 и x64 (у меня версия 14.12.25810.0) на:

    msdia140.dll (1,12 МБ)

    amd64 \ msdia140.dll (1,42 МБ)

  • Все файлы с %programfiles(x86)%\\Microsoft Visual Studio\2017\ **INSERT EDITION HERE** \MSBuild\Microsoft\VisualStudio\v15.0\CodeAnalysis по

    Msbuild \ fxcoptask.dll

    Msbuild \ Microsoft.CodeAnalysis.Targets

    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"/>

И вот что содержит наш 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>..\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 зависит от версии. Он включает в себя Professional и Enterprise. AFAIR версия сообщества имеет другой путь, но также не поддерживает FxCop. Исправления приветствуются :-)

person BatteryBackupUnit    schedule 05.03.2018

Для TFS есть очень простой способ:

На машине сборки добавьте переменную среды: FXCOPDIR, укажите ее на: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop (просто скопируйте эту папку со своего компьютера разработчика).

В этом каталоге есть файл с именем: FxCopCmd.exe, и TFS Build подберет его автоматически, даже если vs не установлен. Возможно, вам придется перезагрузить сервер один или два раза, но сборка в конечном итоге будет работать. Вам также необходимо убедиться, что на gac установлены две библиотеки DLL: Microsoft.VisualStudio.CodeAnalysis.dll и Microsoft.VisualStudio.CodeAnalysis.Sdk.dll. Единственный способ, которым я это получил, - это то, что я взял его из gac на своей машине разработчика. (вы можете отключить специальный просмотр папки gac, изменив реестр, просто погуглите).

person samiboy    schedule 29.07.2014
comment
только вчера я просмотрел файл Microsoft.CodeAnalysis.targets и увидел, что он использует переменную $(FxCopDir). Я думаю, что если вы не используете TFS, вам, по крайней мере, необходимо импортировать этот целевой файл в проекты. Выполнение анализа кода затем контролируется свойством RunCodeAnalysis и выполняется как часть (не совсем после цели) цели Build. - person BatteryBackupUnit; 30.07.2014
comment
Если подумать, разве TFS не поддерживает статический анализ кода (он же FxCop) из коробки? - person BatteryBackupUnit; 30.07.2014
comment
Я не уверен. Я просто хотел, чтобы кто-нибудь, читающий это, знал, что вопреки тому, что я читал в нескольких местах, FxCop больше не доступен как отдельный инструмент, и его необходимо установить против 2013 года, это просто неправда. - person samiboy; 31.07.2014