我的构建服务器(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
条目,但我无法让它发挥作用。
答案 0 :(得分:15)
如果您已经清理了项目文件,包文件和引用,并且所有版本都是Newtonsoft的正确和最新版本,它可能是一个依赖于早期版本的Newtonsoft.Json的.Net dll。在我的例子中,它是System.Net.Http.Formatting,版本= 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异常。将语句添加到调用测试项目的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.Formatting
和Newtonsoft.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。 希望这对其他人有帮助。