【问题标题】:Assembly reference cannot be resolved - dependentAssembly issue?程序集引用无法解决 -dependentAssembly 问题?
【发布时间】:2014-03-19 13:42:12
【问题描述】:

我的构建服务器(TFS/Visual Studio Online)出现以下错误:

CA0055 : Could not load C:\a\Binaries\Api.dll. The following error was encountered while reading module 'System.Net.Http.Formatting': Assembly reference cannot be resolved: Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed.
CA0058 : The referenced assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' could not be found. This assembly is required for analysis and was referenced by: C:\a\Binaries\Api.dll, C:\a\Sources\MyLocation\packages\Microsoft.AspNet.WebApi.Client.5.1.1\lib\net45\System.Net.Http.Formatting.dll.

这是我的 Api.dll 项目中此程序集的 web.config dependentAssembly 条目:

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

安装的Json.NET NuGet包的实际版本是6.0.1:

在查看项目引用时,我将 Newtonsoft.Json 设为 6.0.0.0:

引用中System.Net.Http.Formatting的版本是5.1.0.0。

在构建定义中启用了 NuGet 恢复,我的本地副本上没有这些错误,仅在 TFS 中。

有人能找出问题所在吗?

我认为这可能是由于 dependentAssembly 条目,但我无法让它工作。

【问题讨论】:

标签: c# .net tfs web-config nuget


【解决方案1】:

如果您已清理您的项目文件、包文件和引用,并且所有版本都是正确且最新版本的 Newtonsoft,则它可能是依赖于早期版本 Newtonsoft.Json 的 .Net dll。就我而言,它是 System.Net.Http.Formatting,Version=4.0.0.0:

尝试将以下内容添加到 调用 项目的 *.config 中:

<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>

针对 WebAPI 项目运行测试项目时,由于 Newtonsoft.Json 版本在 4.5.0.0 和 6.0.1.0 之间不匹配,WebAPI 引发了 FileNotFound 异常。将语句添加到 calling 测试项目的 app.config 解决了该问题。

【讨论】:

  • "将语句添加到调用测试项目的 app.config 解决了该问题。"这完全解决了我的问题。在使用 System.Net.Http.Formatting 的项目中已经设置了重定向,但这还不够。调用该项目的每个其他项目也必须具有此重定向。
  • 仅供参考&lt;dependentAssembly&gt;标签嵌套在configurationruntimeassemblyBindingdocs.microsoft.com/en-us/dotnet/framework/configure-apps/…
【解决方案2】:

这个问题出乎意料。

修复方法是在项目文件的每个相关 &lt;PropertyGroup&gt; 部分下包含以下行:

<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>

要编辑项目文件,右键单击项目并单击卸载项目。现在右键单击卸载的项目并选择 Edit MyProject.csproj

【讨论】:

  • 我在我们的测试服务器上遇到了同样的问题,但它在我的开发机器上运行良好,并且 .. 对我不起作用。还尝试了 StrongNameIgnoringVersion 但没有运气。这让我花了好几天的时间。还有其他想法吗?
  • 这拯救了我的一天。当您无法直接修改代码分析的配置时,这是要走的路(在公司构建服务器中通常是这样)
【解决方案3】:

在我的情况下,Newtonsoft.Json bindingredirect 不起作用,因为不知何故,根 web.config 文件不是部署文件的一部分。

检查 web.config 文件的属性。在我们的案例中,“构建操作”值设置为“无”。它应该设置为“内容”,作为部署到服务器的文件的一部分。

还解释了为什么该网站在(本地)IISexpress 上运行,而不是在完整的 IIS 实例上运行。

【讨论】:

    【解决方案4】:

    我发现,尽管我创建的类库同时引用了 System.Net.Http.FormattingNewtonsoft.Json,但只有前者被复制到需要它的调用项目的 bin 目录中。

    向主调用项目添加对Newtonsoft.Json 的引用解决了我遇到的问题:

    System.Net.Http.Formatting.dll 中出现“System.IO.FileNotFoundException”类型的未处理异常。 附加信息:无法加载文件或程序集“Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。系统找不到指定的文件。

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,但在我的本地开发人员机器上使用了一个非常旧的网站解决方案。 问题是 .Net 框架 4 之前的 web.config 中有旧的“残留物”。

      所以不得不从: 致:

      换句话说,删除粗体 appliesTo="v2.0.50727" 的部分,如果不进行此更改,您会得到:无法加载文件或程序集 'Newtonsoft.Json, Version=6.0 .0.0.

      为此苦苦挣扎了好几天,尝试了很多不同的解决方案,但都没有奏效,而这个步骤是我发现的最接近讨论它的方法。显然,这可能会影响任何装配绑定,而不仅仅是 Newtonsoft。 希望这对其他人有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-11
        • 2015-02-26
        • 2014-03-16
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2020-06-13
        • 1970-01-01
        相关资源
        最近更新 更多