【问题标题】:Using Microsoft.Bcl.Async with Code Analysis causes errors将 Microsoft.Bcl.Async 与代码分析一起使用会导致错误
【发布时间】:2013-06-22 07:20:41
【问题描述】:

我正在尝试使用 Microsoft.Bcl.Async 和代码分析,但是当我运行代码分析时出现一个或多个错误。

我正在使用带有更新 2 的 Visual Studio 2012。

这对我来说很容易重现:

  1. 创建一个以.Net 4 为目标的新默认控制台应用程序。
  2. 右键单击References,然后选择Manage NuGet Packages...
  3. 点击Online并在Search Online框中输入async
  4. 您应该看到Async for .Net Framework 4 ...。点击Install 并接受所有问题。
  5. Main() 中添加一行:TaskEx.Delay(1000);using System.Threading.Tasks;
  6. 转到项目属性、代码分析部分并勾选Enable Code Analysis on Build
  7. 编译程序。

我收到两个代码分析错误:

CA0052 错误运行代码分析 CA0052:没有选择目标。 [错误和警告](全局)

CA0055 运行代码分析时出错 CA0055:无法加载 ConsoleApplication2.exe。读取模块“ConsoleApplication2”时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]System.Threading.Tasks.TaskEx::Delay。 [错误和警告](全局)

我得到其他测试程序的不同代码分析错误。我试过的一个基本的 Windows 窗体应用程序给了我:

CA0001 错误运行代码分析 CA0001:读取模块“AsyncForNet4”时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks,版本=1.0.12.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a]系统.Threading.Tasks.TaskEx::延迟。 [错误和警告](全局)

两个问题:

  1. 其他人能否重现此问题?
  2. 有人有解决方案吗?

【问题讨论】:

    标签: c# code-analysis fxcop base-class-library


    【解决方案1】:

    正如 Nicole 所提到的,这是因为代码分析/FxCop 强制要求包括版本在内的强名称完全匹配。这种行为对于 .NET Framework 是有意义的,直到您开始考虑绑定重定向(或其他平台,例如 Store、Phone 和 Silverlight,它们总是允许更高版本的程序集与早期版本匹配), FxCop 不尊重。

    我在 FxCop 中编写了这个原始行为,它针对真实世界的正确性进行了过度优化。当时,除了通过 App.Config 之外,我们没有选择退出。但是,幸运的是,在我离开团队后,团队中的一些聪明人通过命令行和 Visual Studio 都添加了一个。

    通过命令行:

    FxCopCmd.exe /assemblycomparemode:StrongNameIgnoringVersion ...
    

    通过 Visual Studio:

    1. Solution Explorer中右键单击项目并选择 卸载
    2. Solution Explorer中右键单击项目并选择Edit
    3. 在第一个 <PropertyGroup> 元素中,添加以下内容:<CodeAnalysisAdditionalOptions> /assemblycomparemode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>
    4. Solution Explorer中右键单击项目,选择Reload,在提示时保存更改。

    这仅适用于 Visual Studio 2012 及更高版本。

    【讨论】:

    • 你在VS2013中测试过吗?你怎么知道它会继续工作?
    • 这在 VS2013 中也有效,并且在可预见的未来将继续有效。
    • 我无法想象 David Kean 回答的与便携式类库相关的问题没有获得复选标记。俗话说“出马口”。
    • 不使用VS编译解决方案怎么办?我在 CI 服务器 (TeamCity) 中使用 MSBuild,并且启用了 CodeAnalysis。我已将上述行添加到 csproj 文件中,但仍然出现相同的错误。
    【解决方案2】:

    发生这种情况是因为 Bcl.Async 程序集中声明的依赖项版本与分析时可用的版本不匹配。最简单的解决方法是调整 FxCop 的 AssemblyReferenceResolveMode,如 http://davesbox.com/archive/2008/06/14/reference-resolutions-changes-in-code-analysis-and-fxcop-part-2.aspx 所述。

    【讨论】:

    【解决方案3】:

    遇到同样的问题,正在寻找解决方案。我发现的唯一提及是在 bcl 博客文章的 cmets 中 - Microsoft.Bcl.Async is Now Stable(cmets 的第 3 页),其中 Immo Landwerth 对遇到相同问题的人的回应是;

    我们正在调查。乍一看,这似乎是 VS 静态代码分析功能 (FxCop) 中的统一问题。我们已经联系了它的所有者。不幸的是,我认为除了禁用这些项目的代码分析之外没有其他解决方法:-(

    回复日期为 2013 年 4 月 26 日,此后是否有任何进展。

    所以现在我想解决方法是:

    • 禁用代码分析
    • 重写你的代码不要使用TaskEx.Delay()

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 2013-11-11
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多