Перенаправление привязки сборки и анализ кода

Я использую DotNetOpenAuth (который ссылается на System.Web.Mvc версии 1.0.0.0) в проекте Mvc 3.0.0.0 в Visual Studio 2010.

Я использую перенаправление привязки сборки следующим образом: -

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Все работает нормально, кроме анализа кода, который выдает следующие ошибки: -

CA0001: при чтении модуля X возникла следующая ошибка: ссылка на сборку не может быть разрешена: System.Web.Mvc, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35.

и

CA0058: указанная сборка «System.Web.Mvc, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35» не найдена. Эта сборка требуется для анализа, и на нее ссылается: X.

Есть ли способ заставить инструмент анализа кода учитывать перенаправление привязки сборки?


person Iain Galloway    schedule 28.10.2010    source источник


Ответы (4)


Просто дополню чуть более точным ответом:

Вам необходимо запустить FxCopCmd.exe с помощью:

fxcopcmd.exe /assemblyCompareMode:StrongNameIgnoringVersion

или измените файл проекта Visual Studio для каждой группы свойств конфигурации сборки, например:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  ...
  <CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
</PropertyGroup>
person peter_raven    schedule 30.03.2011
comment
Спасибо. Я добавил строку ниже, CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions> под <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> и <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> и <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - person Diganta Kumar; 11.07.2012
comment
К сожалению, у меня это по какой-то причине не работает; Я все еще получаю ту же ошибку. - person Rami A.; 14.08.2013
comment
Вы молодец @peter_raven! - person Dr Schizo; 03.09.2014

См. http://davesbox.com/archive/2008/06/10/reference-resolution-changes-in-code-analysis-and-fxcop-part-1.aspx и http://davesbox.com/archive/2008/06/14/reference-resolutions-changes-in-code-analysis-and-fxcop-part-2.aspx для получения небольшой справочной информации.

В VS2010 / FxCop 10.0 появился новый переключатель командной строки / assemblyCompareMode для fxcopcmd.exe, который позволяет указать режим сравнения, не возясь с файлом .config. Вы можете указать это в своем VS-проекте с помощью свойства MSBuild CodeAnalysisAdditionalOptions.

person Nicole Calinoiu    schedule 28.10.2010

В дополнение к решению peter_raven вы можете указать опцию, чтобы анализ кода работал со сборкой TFS. Добавьте это в параметры сборки, вкладку процесса, расширенную категорию в «Аргументы MSBuild»:

/p:CodeAnalysisAdditionalOptions=/assemblyCompareMode:StrongNameIgnoringVersion
person Michael Logutov    schedule 11.12.2013

Используйте это, если вам нужно отключить анализ кода.

В Visual Studio 2012

  1. Щелкните правой кнопкой мыши свой проект и выберите «Свойства» во всплывающем меню.
  2. Перейдите на вкладку «Анализ кода» и снимите флажок «Включить анализ кода при сборке».

Очистить и построить. Ошибка анализа кода должна исчезнуть.

person ShaTin    schedule 27.03.2014