FxCop в MSBuild и отключение CA0060 исключений - PullRequest
2 голосов
/ 15 декабря 2011

Я очень новичок в MSBuild, и мне нужно некоторое время, чтобы понять, как это делать.

Поэтому я пытаюсь интегрировать FxCop в мой проект, чтобы он автоматически запускался при сборке их на сервере сборки.

На данный момент кажется, что можно добавить нестандартное задание в сборку, которую вы вызываете при сборке. Итак, я создал следующее:

<Target Name="ExecuteFxCop">
  <ItemGroup>
    <Files Include="bin\XXXX.dll" />
  </ItemGroup>
  <!-- Call the task using a collection of files and all default rules -->
  <MSBuild.ExtensionPack.CodeQuality.FxCop 
  TaskAction="Analyse" 
  Files="@(Files)" 
  SearchGac="True"
  OutputFile="FxCopReport.xml">
  </MSBuild.ExtensionPack.CodeQuality.FxCop>
</Target>

Однако, когда я запускаю эту >msbuild XXXX.csproj /t:ExecuteFxCop, она завершается с ошибкой 512, которую я сузил до исключения из сборок с косвенной ссылкой:

<Exception Keyword="CA0060" Kind="Engine" TreatAsWarning="True">
  <Type>Microsoft.FxCop.Sdk.FxCopException</Type>
  <ExceptionMessage>The indirectly-referenced Silverlight assembly 'System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' could not be found. This assembly is not required for analysis, however, analysis results could be incomplete. Silverlight reference assemblies should be specified with the '/reference' switch. This assembly was referenced by: XXX\bin\ESRI.ArcGIS.Client.dll.</ExceptionMessage>
</Exception>

Но я не могу добавить эту ссылку. Есть ли способ заставить сборку увидеть эту ссылку или, желательно, вообще отключить ошибку?

Я попробовал: http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/c6780439-bc04-459e-80c3-d1712b2f5456/, но это не работает

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Попробуйте обойти здесь: http://geekswithblogs.net/blachniet/archive/2011/07/12/avoiding-fxcop-warning-ca0060.aspx

Редактировать

Например, используя задачу FxCop MsBuild, установите ContinueOnError и проверьте ExitCode следующим образом:

<Target Name="ExecuteFxCop">
  <ItemGroup>
    <Files Include="bin\XXXX.dll" />
  </ItemGroup>
  <!-- Call the task using a collection of files and all default rules -->
  <MSBuild.ExtensionPack.CodeQuality.FxCop 
  TaskAction="Analyse" 
  Files="@(Files)" 
  SearchGac="True"
  OutputFile="FxCopReport.xml"
  ContinueOnError="WarnAndContinue">
    <Output TaskParameter="ExitCode" PropertyName="ExitCode"/>
  </MSBuild.ExtensionPack.CodeQuality.FxCop>

  <Error Condition="$(ExitCode) != 512" Text="FxCop failed with exit code: $(ExitCode)"/>

</Target>

P.S. (Это не проверено)

0 голосов
/ 13 апреля 2013

Не уверен, что вы все еще ищете решение, но обычно мне подходит добавление

fxcop cmd-option /d:{dir-of-random-assemblies} 

, который, по сути, указывает fxcop искать в этом дополнительном каталоге сборки. Добавление ссылки на proj, который не нуждается в этом, на мой взгляд, плохая идея.

http://msdn.microsoft.com/en-US/library/bb429449(v=vs.80).aspx

...