我有另一个这些“无法加载文件或程序集或其依赖项之一”的问题。

附加信息:无法加载 文件或程序集 “Microsoft.Practices.Unity, Version = 1.2.0.0、文化=中立, 都31 bf3856ad364e35”或 它的依赖项之一。在位于 程序集的显式定义可以 不匹配程序集引用。 (异常来自HRESULT: 0x80131040)

我不知道是什么导致了这种情况,也不知道如何调试它来找到原因。

我在我的解决方案目录.csproj文件中做了一个搜索,我有Unity的每个地方:

参考 包括= " Microsoft.Practices.Unity, Version = 2.0.414.0、文化=中立, 都31 bf3856ad364e35, processorArchitecture = MSIL”

在我的任何项目中都找不到任何与1.2.0.0相反的参考。

我该怎么解决这个问题呢?


当前回答

另一个可能的原因是:确保没有意外地在项目属性中为两个项目指定相同的程序集名称。

其他回答

步骤1: 删除现有引用 步骤2: 清洁解决方案 步骤3: 再次添加项目Reference。

搞定了。:)

Juntos的答案是正确的,但你也应该考虑:

对于unity v2.1.505.2,不同的AssemblyVersion和AssemblyFileVersion属性被指定:

AssemblyFileVersion被NuGet使用,但是CLR并不关心它! CLR将只使用AssemblyVersion!

因此,您的重定向应该应用于在AssemblyVersion属性中指定的版本。因此应该使用2.1.505.0

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>

参见: AssemblyVersion, AssemblyFileVersion和AssemblyInformationalVersion之间有什么区别?

好吧,这听起来可能很愚蠢,但在尝试了所有其他解决方案并花了一个晚上在这个愚蠢的事情上之后,我是如何解决这个问题的。

我得到了相同的错误,一些DLL从Bin文件夹丢失。 我试着删除,从teamfoundationserver上恢复所有东西,但没有用。 从我办公室的本地电脑上拿了一份Bin文件夹,把它换掉了。它也没起作用。 最后,我手动ftp服务器,得到了显示为丢失的DLL副本,然后它开始显示文件列表序列中的下一个文件丢失。

所以我ftped服务器得到所有的Bin文件夹,手动替换每个文件一个接一个。(不是Ctrl + All和替换..我试过了,但没有用。) 不知怎的,它起作用了……

对我来说,似乎Nuget并没有很好地处理我的项目/解决方案。我用Nuget安装了NewtonSoft。项目文件似乎正确地引用了它,当我在解决方案资源管理器/依赖项/Nuget中r -点击dll名称时,然后单击属性,我发现dll存在于属性说它应该在的地方。

我删除了Nuget包,并做R-click项目>添加>引用,并浏览到包目录中的dll,当以前的Nuget进程已经安装它时,然后解决方案运行良好。

注意:这个解决方案相当大杂烩,首先是Xamarin。iOS解决方案和添加。net标准项目(这是我使用Nuget有困难的地方)。解决方案中还有一个“可移植”项目。我从一个已经离开3年的开发者那里继承了所有这些。哈哈。

对我来说,其他的解决方案都不起作用(包括清洁/重建策略)。我找到了另一个解决方案,即关闭并重新打开Visual Studio。

我想这会迫使Visual Studio重新加载解决方案和所有项目,重新检查流程中的依赖项。