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

附加信息:无法加载 文件或程序集 “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相反的参考。

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


当前回答

我有一个c# Winforms项目,名为SetTags,其中有大量的表单,我使用Visual Studio 2013来处理。在编辑其中一个并尝试构建后,我得到了错误:

Could not load file or assembly 'SetTags Version = 2.1.85.0, Culture=neutral,PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

当我试图保存项目或关闭一直在处理的表单时,也出现了错误。

我通过删除最近添加的单选按钮控件并注释掉对它的所有引用来解决这个问题,然后再次添加该控件并取消注释代码。这让我可以保存表单,在关闭重新启动VS时,问题已经消失了。

我的Visual Studio环境偶尔有很多问题——工具箱不显示或只在VS启动时出现,在设计模式下查看表单时无法识别自定义控件——这可能是我需要转移到后面的VS版本。

其他回答

在解决方案资源管理器中右键单击项目(不是解决方案),在构建选项卡中选择平台目标:“任何CPU”。

对我来说,在没有unity c# Projects Checkmark的情况下重建unity游戏是可行的。

Goto:解决方案->包 点击高级选项卡(在页面下方找到) 将您的dll添加到其他程序集(这样我们就可以在sharepoint中添加外部dll)。

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

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

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之间有什么区别?