我遇到了另一个“无法加载文件或程序集或其依赖项之一”问题。
附加信息:无法加载文件或程序集“Microsoft.Practices.Unity,Version=1.2.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040)
我不知道是什么原因造成的,也不知道如何调试它以找到原因。
我已经在我的解决方案目录 .csproj 文件中进行了搜索,并且在我拥有 Unity 的每个地方都有:
参考包括=“Microsoft.Practices.Unity,版本=2.0.414.0,文化=中性,PublicKeyToken=31bf3856ad364e35,处理器架构=MSIL”
在我的任何项目中都找不到任何违反 1.2.0.0 的参考。
任何想法我应该如何解决这个问题?
Unity
库中的某些东西吗?
检查您是否引用了一个程序集,而该程序集又引用了旧版本的统一。例如,假设您有一个名为 ServiceLocator.dll 的程序集,它需要旧版本的 Unity 程序集,现在当您引用 ServiceLocator 时,您应该为它提供旧版本的 Unity,这就产生了问题。可能是所有项目构建其程序集的输出文件夹,具有旧版本的统一。
您可以使用 FusLogVw 找出谁在加载旧程序集,只需定义日志路径,然后运行您的解决方案,然后检查(在 FusLogvw 中)加载 Unity 程序集的第一行,双击它并查看调用程序集,然后就可以了。
打开 IIS 管理器
选择应用程序池
然后选择您正在使用的池
转到高级设置(在右侧)
将 Enable 32-bit application false 的标志更改为 true。
对我来说,其他解决方案都不起作用(包括清理/重建策略)。我找到了另一种解决方法,即关闭并重新打开 Visual Studio。
我猜这会迫使 Visual Studio 重新加载解决方案和所有项目,重新检查过程中的依赖关系。
尝试清理解决方案中的 Debug 和 Release 文件夹。然后再次删除并添加统一。
bin/
文件夹并再次构建了解决方案。
在 99% 的情况下,无法加载文件或程序集或其依赖项问题之一是由依赖项引起的!我建议您按照以下步骤操作:
从 http://www.dependencywalker.com/ 下载 Dependency Walker 启动 Dependency Walker 并打开 dll(在我的情况下为 NativeInterfaces.dll) 您可以看到一个或多个带有红色错误的 dll 错误打开文件...
https://i.stack.imgur.com/9xmc8.png
这意味着您的系统中缺少此dll;在我的情况下,dll 名称是 MSVCR71.DLL 您可以从 google 下载缺失的 dll 并复制到正确的路径(在我的情况下为 c:\windows\system32)此时,您必须在 GAC(全局程序集缓存)中注册新的 dll ): 打开一个 DOS 终端并写入: cd \Windows\System32 regsvr32 /i msvcr71.dll 重新启动您的应用程序
API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
) 未找到并带我到 this stackoverflow question。基本上请记住,可能会查看某些文件的误报,链接提供了更多详细信息。
尽管最初的问题是五年前发布的,但问题仍然存在并且相当烦人。
一般的解决方案是彻底分析所有引用的程序集,以了解发生了什么问题。为了使这项任务更容易,我制作了一个工具(Visual Studio 扩展),它允许选择 .NET 程序集(.dll
或 .exe
文件)来获取所有引用程序集的图表,同时突出显示冲突或丢失的引用。
该工具在 Visual Studio 库中可用:https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734
https://i.stack.imgur.com/chIEo.png
以下为我工作。
删除临时文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
关闭 VSTS 并再次打开
删除和添加相同的 DLL(注意:添加相同的匹配版本)
Microsoft Enterprise Library(由 .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>
或者,您可能只想将企业库更新到最新版本。
检查项目中的 Web.config/App.config 文件。查看版本号是否正确。
<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />
这对我有用。
https://i.stack.imgur.com/7sQHj.jpg
Juntos 的回答是正确的,但您还应该考虑:
对于统一 v2.1.505.2,指定了不同的 AssemblyVersion 和 AssemblyFileVersion 属性:
https://i.stack.imgur.com/oa57V.png
NuGet 使用 AssemblyFileVersion,但 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>
另请参阅:What are differences between AssemblyVersion, AssemblyFileVersion and AssemblyInformationalVersion?
我也遇到了这个可怕的错误并找到了解决方案......
右键单击解决方案名称单击清理解决方案重新启动 Visual Studio 转到项目属性 >> 构建更改配置以发布开始调试 (F5)
1) , 2)
https://i.stack.imgur.com/xsG56.png
4) , 5)
https://i.stack.imgur.com/hSzMm.png
希望这对您也有帮助。
转到:解决方案-> 包
单击高级选项卡(在页面下方查找)
将您的 dll 添加到其他程序集(这样我们可以在 sharepoint 中添加外部 dll)。
不确定这是否有帮助。
检查程序集名称和程序集中属性中的默认命名空间是否匹配。这解决了我的问题,产生了同样的错误。
在我的 bin 文件夹中是一个名为 Unity.MVC3 的非引用 dll,我尝试在 Visual Studio 中搜索对此的任何引用但没有成功,所以我的解决方案非常简单,只需从 bin 文件夹中删除该 dll。
我遇到了同样的问题,我通过以下说明解决了它:
打开工具菜单并在选项中选择选项,窗口转到项目和解决方案/Web 项目检查使用 64 位版本的 IIS ...
https://i.stack.imgur.com/2kMUv.jpg
谢谢 Riddhi M. 以下为我工作。
删除临时文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files Close VSTS and Open Again Remove and Add the same DLLs (Note: you add the same matching versions)
你说你的解决方案中有很多项目......好吧,从构建顺序顶部附近的一个开始。得到那个来构建,一旦你弄清楚了,你就可以对其余的应用相同的修复。
老实说,您可能只需要刷新您的参考。听起来您要么更新了版本,但没有更新引用,或者如果您将解决方案保留在源代码管理中,这是一个相对路径问题。只需验证您的假设,然后重新添加参考。
如果您通过在 windows xp 上打开应用程序而收到此错误消息,则意味着您首先安装了该应用程序,因为它在没有 net framework 4 和 service pack 3 的情况下无法工作。您一次又一次地安装了此错误,因此您应该再次重新安装该应用程序,但首先从添加和删除中卸载
如果这不起作用,请不要虐待我。我也是小学生
以下为我工作。
删除临时文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 然后右键单击 Temporary Asp.net Files>properties>security 并授予对 IIS 和运行我项目的所有用户的完全控制访问权限
然后右键单击 Temporary Asp.net Files>properties>security 并授予对 IIS 和运行我的项目的所有用户的完全控制访问权限
您必须从输出文件夹中删除您的 appname.dll 文件。清理调试和发布文件夹。重建并复制到输出文件夹重新生成的 dll 文件。
我将卸载/未找到的库/项目“设置为启动项目”。
然后部署它。
有效!
我认为它找不到.dll,因为它一开始不在程序集中。
另一个可能的原因:确保您没有不小心在项目属性中为两个项目指定了相同的程序集名称。
我使用 Enterprise Library 5 的 .NET 4.0 解决方案是添加对以下内容的引用:
Microsoft.Practices.Unity.Interception.dll
注意有冲突的引用。即使在清理和重建之后,冲突的引用仍然会导致问题。我的问题是在 AForge 和 Accord 之间。我删除了两个引用,并重新添加了重新选择特定引用的引用(特别是我的情况,只是 Accord)。
就我而言,建议的答案都没有奏效。
这对我有用:
删除引用重命名 DLL 再次导入引用
第二步显然很重要,因为没有它就无法工作。
尝试检查引用的“复制到本地”属性是否设置为 true,并且特定版本是否设置为 true。这与 Visual Studio 中的应用程序相关。
我今天遇到了这个问题,就我而言,这个问题很奇怪:
<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.
请注意 XML 末尾的杂散字符 - 不知何故,这些字符已从版本号移到此 XML 块的末尾!
<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>
更改为上述内容,瞧!一切都再次奏效。
清理解决方案,然后右键单击项目并选择 Package
这里增加 Assembly
和 Assembly file
版本并重建。
https://i.stack.imgur.com/PfeOd.png
如果这不起作用,
1 - 在文件资源管理器中打开解决方案。
2 - 关闭 Visual Studio。
3 - 删除所有 bin
和 obj
文件夹。
4 - 重新打开项目并构建它。
不定期副业成功案例分享