C# 无法加载文件或程序集或其依赖项之一
我遇到了另一个“无法加载文件或程序集或其依赖项”问题 其他信息:无法加载 文件或程序集 “Microsoft.Practices.Unity, 版本=1.2.0.0,区域性=中性, PublicKeyToken=31bf3856ad364e35'或 它的一个依赖项。位于 程序集的清单定义不正确 与程序集引用不匹配。 (来自HRESULT的异常:0x8013100) 我不知道这是什么原因,也不知道如何调试它来找到原因 我已经在我的解决方案目录.csproj文件中进行了搜索,在我拥有Unity的每个地方我都有: 参考文献 Include=“Microsoft.Practices.Unity, 版本=2.0.414.0,区域性=中性, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL“ 在我的任何项目中都找不到任何与1.2.0.0相反的参考 我该怎么解决这个问题C# 无法加载文件或程序集或其依赖项之一,c#,.net,reference,compiler-errors,C#,.net,Reference,Compiler Errors,我遇到了另一个“无法加载文件或程序集或其依赖项”问题 其他信息:无法加载 文件或程序集 “Microsoft.Practices.Unity, 版本=1.2.0.0,区域性=中性, PublicKeyToken=31bf3856ad364e35'或 它的一个依赖项。位于 程序集的清单定义不正确 与程序集引用不匹配。 (来自HRESULT的异常:0x8013100) 我不知道这是什么原因,也不知道如何调试它来找到原因 我已经在我的解决方案目录.csproj文件中进行了搜索,在我拥有Unity的每个
我也希望您能给我一些关于如何调试此类问题的提示。尝试清理解决方案中的调试和发布文件夹。然后删除并再次添加unity。您说您的解决方案中有很多项目。。。那么,从构建顺序顶部附近的一个开始。让这一个来构建,一旦你弄明白了,你就可以将同样的修复应用到其余的部分 老实说,你可能只需要刷新你的参考资料。听起来您要么更新了版本,要么没有更新引用,或者如果您将解决方案保留在源代码管理中,这是一个相对路径问题。只需验证您的假设,然后重新添加引用即可
ServiceLocator.dll
的程序集,它需要一个旧版本的Unity程序集,现在当您引用ServiceLocator
时,您应该为它提供旧版本的Unity,这就产生了问题您可以使用查找谁正在加载旧程序集,只需定义日志路径,然后运行您的解决方案,然后检查(在FusLogvw中)加载Unity程序集的第一行,双击它并查看调用的程序集,然后就可以了。对于我来说,其他解决方案都不起作用(包括清理/重建策略)。我找到了另一个解决方案,即关闭并重新打开Visual Studio
我想这会迫使Visual Studio重新加载解决方案和所有项目,重新检查过程中的依赖关系。不确定这是否有帮助
检查asemblies中属性中的程序集名称和默认命名空间是否匹配。这解决了我的问题,产生了相同的错误。Microsoft企业库(由.NetTiers引用)是我们的问题,它反过来又引用了旧版本的Unity。为了解决这个问题,我们在web.config中使用了以下绑定重定向:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Practices.Unity.Configuration" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0-2.0.414.0" newVersion="2.1.505.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
或者,您可能只想将企业库更新到最新版本。以下内容对我很有用
- 删除临时文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\ASP.NET临时文件
- 关闭VST并再次打开
- 删除和添加相同的DLL(注意:添加相同的匹配版本)
- 转到:解决方案->包
- 单击高级选项卡(在页面下方找到)
- 将您的dll添加到其他程序集(这样我们可以在sharepoint中添加外部dll)
将Enable 32-bit application false(启用32位应用程序错误)的标志更改为true。如果您在windows xp上打开应用程序时收到此错误消息,则表示您首先安装了该应用程序,因为它在没有net framework 4和service pack 3的情况下无法工作。您安装了这两个应用程序,并且再次出现此错误,因此您应该重新安装该应用程序,但首先从“添加和删除”卸载
如果这不起作用,请不要虐待我。我也是一名大三学生,Juntos的回答是正确的,但你也应该考虑: 对于unityv2.1.505.2指定了不同的AssemblyVersion和AssemblyFileVersion属性: AssemblyFileVersion由NuGet使用,但CLR不关心它! CLR将只使用汇编版本 因此,重定向应该应用于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>
另一个可能的原因:确保您没有在项目属性中意外地为这两个项目指定相同的程序集名称。以下内容对我有效
- 删除临时文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\ASP.NET临时文件
- 然后右键单击临时Asp.net文件>属性>安全性
并授予对IIS和运行我的项目的所有用户的完全控制访问权
检查项目中的Web.config/App.config文件。我明白了
<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />
cd \Windows\System32
regsvr32 /i msvcr71.dll
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0" newVersion="3.1.0.0" />
</dependentAssembly>0.
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>