程序集绑定重定向和代码分析

44

我正在使用DotNetOpenAuth(它引用System.Web.Mvc版本1.0.0.0)在Visual Studio 2010中的Mvc 3.0.0.0项目中。

我正在使用以下程序集绑定重定向:

<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=neutral,PublicKeyToken=31bf3856ad364e35。

CA0058:找不到引用程序集“System.Web.Mvc,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。此程序集对于分析是必需的,并被模块 X 引用。

有没有办法让代码分析工具尊重程序集绑定重定向?

4个回答

64

为了补充更精确的答案:

你需要使用以下其中一种方式运行 FxCopCmd.exe:

fxcopcmd.exe /assemblyCompareMode:StrongNameIgnoringVersion

或者修改您的 Visual Studio 项目文件以针对每个生成配置的属性组进行配置,例如:

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

谢谢。我已经在以下位置添加了一行代码:CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions><Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration><PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">以及<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - Diganta Kumar
1
不幸的是,出于某种原因,这对我不起作用;我仍然得到相同的错误。 - Rami A.
你很棒,@peter_raven! - Dr Schizo

6
请参考以下链接了解更多背景信息:http://davesbox.com/archive/2008/06/10/reference-resolution-changes-in-code-analysis-and-fxcop-part-1.aspxhttp://davesbox.com/archive/2008/06/14/reference-resolutions-changes-in-code-analysis-and-fxcop-part-2.aspx
在VS2010/FxCop 10.0中,fxcopcmd.exe新增了一个/assemblyCompareMode命令行开关,可以让您指定比较模式,而无需修改.config文件。您可以通过使用CodeAnalysisAdditionalOptions MSBuild属性在您的VS项目中指定此选项。

4
除了peter_raven的解决方案,您还可以指定选项使代码分析与TFS构建一起使用。在构建选项中添加此选项,进程选项卡,高级类别中的“MSBuild Arguments”中:
/p:CodeAnalysisAdditionalOptions=/assemblyCompareMode:StrongNameIgnoringVersion

1

如果需要关闭代码分析,请使用此选项。

在 Visual Studio 2012 中,

  1. 右键单击项目,从弹出菜单中选择“属性”。
  2. 单击“代码分析”选项卡,取消选中“在生成时启用代码分析”。

清理并构建。代码分析错误应该会消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接