无法解决程序集引用 - dependentAssembly问题?

时间:2014-02-19 09:55:13

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

我的构建服务器(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:

enter image description here

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

enter image description here

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

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

是否有人能够发现可能存在的问题?

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

5 个答案:

答案 0 :(得分:15)

如果您已经清理了项目文件,包文件和引用,并且所有版本都是Newtonsoft的正确和最新版本,它可能是一个依赖于早期版本的Newtonsoft.Json的.Net dll。在我的例子中,它是System.Net.Http.Formatting,版本= 4.0.0.0:

enter image description here

尝试将以下内容添加到调用项目的* .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异常。将语句添加到调用测试项目的app.config中可以解决问题。

答案 1 :(得分:13)

这个问题出人意料。

修复是在每个相关<PropertyGroup>部分下的项目文件中包含以下行:

<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>

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

答案 2 :(得分:3)

在我的情况下,Newtonsoft.Json bindingredirect无法正常工作,因为root web.config文件不是部署文件的一部分。

检查web.config文件的属性。我的情况是,“Build Action”值设置为“None”。应将其设置为“Content”,使其成为服务器部署文件的一部分。

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

答案 3 :(得分:0)

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

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

  

System.Net.Http.Formatting.dll中发生了类型为'System.IO.FileNotFoundException'的未处理的异常。   附加信息:无法加载文件或程序集“ Newtonsoft.Json,版本= 12.0.0.0,文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。系统找不到指定的文件。

答案 4 :(得分:0)

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

因此必须更改自: 收件人:

换句话说,用粗体 appliesTo =“ v2.0.50727 ”删除零件,如果没有此更改,您将得到:无法加载文件或程序集'Newtonsoft.Json,Version = 6.0 .0.0。

为此进行了数天的尝试,尝试了许多不同的解决方案,但没有一个起作用,而这是我发现最接近讨论的方案。显然,这可能会影响任何程序集绑定,而不仅仅是Newtonsoft。 希望这对其他人有帮助。