我试图在C#Windows窗体应用程序(Visual Studio 2005)中运行一些单元测试,我收到以下错误:
System.IO.FileLoadException:无法加载文件或程序集"Utility,Version = 1.2.0.200,Culture = neutral,PublicKeyToken = 764d581291d764f7"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)**
在x.Foo.FooGO()
在Foo.cs中的x.Foo.Foo2(String groupName_):第123行
在FooTests.cs中的x.Foo.UnitTests.FooTests.TestFoo():第98行**
System.IO.FileLoadException:无法加载文件或程序集'Utility,Version = 1.2.0.203,Culture = neutral,PublicKeyToken = 764d581291d764f7'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我查看我的参考资料,我只参考Utility version 1.2.0.203(另一个是旧的).
关于我如何弄清楚试图引用这个旧版本的DLL文件的任何建议?
此外,我认为我的硬盘上甚至没有这个旧组件.有没有工具可以搜索这个旧的版本化程序集?
当我构建除包含引用的网站之外的任何其他项目时,Visual Studio正在覆盖我在项目引用和NuGet包文件中配置的NewtonSoft.Json.DLL的正确版本.
好.这是场景:
我有一个后端服务和网站的解决方案.该网站在.NET 4.5上运行,并配置了NuGet以引入Newtonsoft.Json.DLL的6.0.1版本.
<package id="Newtonsoft.Json" version="6.0.1" targetFramework="net45" />
Run Code Online (Sandbox Code Playgroud)
这会将dependenAssembly绑定添加到web.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>
Run Code Online (Sandbox Code Playgroud)
我可以毫无问题地构建和运行这个网站.
我最近更新了从.NET 4.0到.NET 4.5的所有类库和后端服务.更新后,每当我构建其中一个类库或运行/调试后端服务时,网站就无法运行.
Could not load file or assembly 'Newtonsoft.Json' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)
我跟踪了这一事实,当重建其中一个类库或从Visual Studio运行/调试后端服务时,Newtonsoft.Json.DLL会被旧版本的文件 - 版本4.5.11覆盖.由于显式的dependentAssembly绑定,在我访问网站之后,我得到上面提到的"无法加载..."错误.
如果我只想运行后端服务或网站中的一个或另一个,那就没关系,但我必须同时运行它们才能使我的应用程序正常运行.但由于这个错误,我无法在网站或网站崩溃的同时运行后端服务.
如何防止Visual Studio覆盖DLL?
请注意,我只6.0.1跨整个解决方案的参考设置(即没有参考任何地方到4.5.11).在网站中,我将'Copy Local'设置为true,并将'Specific Version'设置为对Newtonsoft.Json.DLL为true.