Assembly Binding Redirection and Code Analysis

我只是一个虾纸丫 提交于 2019-12-20 08:34:17

问题


I'm using DotNetOpenAuth (which references System.Web.Mvc version 1.0.0.0) in a Mvc 3.0.0.0 project in Visual Studio 2010.

I'm using assembly binding redirection as follows:-

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

Everything works fine, except code analysis which gives me the following errors:-

CA0001 : The following error was encountered while reading module X: Assembly reference cannot be resolved: System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.

and

CA0058 : The referenced assembly 'System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' could not be found. This assembly is required for analysis and was referenced by: X.

Is there a way to get the code analysis tool to respect the assembly binding redirection?


回答1:


Just to supplement with a little more precise answer:

You need to either run FxCopCmd.exe with:

fxcopcmd.exe /assemblyCompareMode:StrongNameIgnoringVersion

or modify your Visual Studio project file for each build configuration's property group, like this:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  ...
  <CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
</PropertyGroup>



回答2:


See http://davesbox.com/archive/2008/06/10/reference-resolution-changes-in-code-analysis-and-fxcop-part-1.aspx and http://davesbox.com/archive/2008/06/14/reference-resolutions-changes-in-code-analysis-and-fxcop-part-2.aspx for a bit of background information.

In VS2010/FxCop 10.0, there's a new /assemblyCompareMode command line switch for fxcopcmd.exe that allows you to specify the comparison mode without mucking about with the .config file. You can specify this in you VS project by using the CodeAnalysisAdditionalOptions MSBuild property.




回答3:


In addition to peter_raven solution you can specify option to make Code Analysis work with TFS build. Add this in build options, process tab, advanced category in "MSBuild Arguments":

/p:CodeAnalysisAdditionalOptions=/assemblyCompareMode:StrongNameIgnoringVersion



回答4:


Use this if you need to turn off Code Analysis.

In Visual Studio 2012,

  1. Right click on your project and select "Properties" from the popup menu.
  2. Click on "Code Analysis" tab and uncheck "Enable Code Analysis on Build"

Clean and Build. Code Analysis error should go away.



来源:https://stackoverflow.com/questions/4042855/assembly-binding-redirection-and-code-analysis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!