无法加载文件或程序集或其依赖项之一

ron*_*nag 224 .net c# compiler-errors reference

我有另一个"无法加载文件或程序集或其中一个依赖项"的问题.

附加信息:无法加载文件或程序集"Microsoft.Practices.Unity,Version = 1.2.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我不知道是什么导致这个或我如何调试它来找到原因.

我已经在我的解决方案目录.csproj文件中进行了搜索,以及我拥有Unity的所有地方:

参考Include ="Microsoft.Practices.Unity,Version = 2.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL"

在我的任何项目中找不到任何与1.2.0.0相对应的参考.

任何想法我应该如何解决这个问题?

我也很欣赏如何调试这样的问题的技巧.

Nou*_*uny 109

  1. 检查您是否引用了一个程序集,而该程序集又引用了旧版本的统一.例如,假设您有一个ServiceLocator.dll需要旧版本Unity程序集的程序集,现在当您引用ServiceLocator它时,您应该使用旧版本的Unity提供它,这就产生了问题.

  2. 可能是所有项目构建其程序集的输出文件夹,具有旧版本的统一.

您可以使用FusLogVw找出谁正在加载旧程序集,只需定义日志路径,然后运行解决方案,然后检查(在FusLogvw中)加载Unity程序集的第一行,双击它并查看调用集会,你走了.

  • FuseLogVw的日志文件在哪里 (6认同)

小智 75

打开IIS管理器

选择应用程序池

然后选择您正在使用的池

转到高级设置(右侧)

将启用32位应用程序false的标志更改为true.


Rob*_*nik 58

对我来说,没有其他解决方案有效(包括清洁/重建策略).我找到了另一种解决方法,即关闭并重新打开Visual Studio.

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

  • 如果你不相信这会起作用,至少试试吧.直到我做到,我才自己相信. (28认同)
  • 为我工作 (2认同)
  • 是的,这里也一样,结合执行清洁解决方案。完成此操作后,VS 突出显示了之前未显示的构建错误。之前它说重建后重建全部成功 - 我引用了错误的类命名空间。 (2认同)

Ale*_*iev 43

尝试清理解决方案中的Debug和Release文件夹.然后删除并再次添加单位.

  • 这个问题可能是由许多事情引起的......你的解决方案解决了我的问题,也可能解决其他问题. (3认同)

小智 18

99%的无法加载文件或程序集或其依赖项之一问题是由依赖项引起的!我建议你按照以下步骤操作:

  1. http://www.dependencywalker.com/下载Dependency Walker

  2. 启动Dependency Walker并打开dll(在我的例子中NativeInterfaces.dll)

  3. 您可以在红色错误打开文件中看到一个或多个带有错误的dll ...

  4. 这意味着您的系统中缺少此dll; 在我的情况下,DLL名称是MSVCR71.DLL

  5. 你可以从谷歌下载misings dll并在正确的路径中复制(在我的情况下c:\windows\system32)

  6. 此时,您必须在GAC(全局程序集缓存)中注册新的dll:打开DOS终端并写入:

    cd \Windows\System32
    regsvr32 /i msvcr71.dll
    
    Run Code Online (Sandbox Code Playgroud)
  7. 重启你的申请!

  • 依赖步行器很棒,但是将随机DLL从互联网复制到Windows是不太好的.最好尝试找到提供这些dll的安装程序. (20认同)

小智 16

以下为我工作.

  • 删除临时文件C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
  • 关闭VSTS并再次打开
  • 删除并添加相同的DLL(注意:您添加相同的匹配版本)


Jas*_*bas 15

检查项目中的Web.config/App.config文件.查看版本号是否正确.

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" />
Run Code Online (Sandbox Code Playgroud)

这对我有用.

  • 这对我有用,尽管它是web.config,而不是app.config (2认同)

Reb*_*cca 14

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>
Run Code Online (Sandbox Code Playgroud)

或者,您可能只想将企业库更新到最新版本.


mar*_*s19 14

尽管最初的问题是在5年前发布的,但问题仍然存在并且相当令人讨厌.

一般的解决方案是彻底分析所有引用的程序集,以了解出现了什么问题.为了使这个任务更容易,我创建了一个工具(一个Visual Studio扩展),它允许选择.Net程序集(.ddl或.exe文件),并获得所有引用的程序集的图形,其中包含突出显示的冲突或错过的引用.

该工具在Visual Studio库中可用:https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734

输出示例: 在此输入图像描述


小智 11

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


Iev*_*ida 10

我有类似的问题.**Juntos答案是正确的**但你应该注意一个重要提示!

对于unity 2.1.505.2,指定了不同的AssemblyVersionAssemblyFileVersion:

在此输入图像描述

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>
Run Code Online (Sandbox Code Playgroud)

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


Ros*_*ala 6

我也遇到了这个可怕的错误并为此找到了解决方案......

  1. 右键单击解决方案名称
  2. 单击清洁解决方案
  3. 重新启动Visual Studio
  4. 转到项目属性>>构建
  5. 配置更改为发布
  6. 开始调试(F5)

1),2)

右键单击解决方案名称

4),5)

将配置更改为发布

希望这也会对你有所帮助.


小智 5

不确定这是否有帮助。

检查程序集中的属性中的程序集名称和默认命名空间是否匹配。这解决了我的问题,产生了同样的错误。


小智 5

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

  • 我的VS2010项目中没有"解决方案 - >包" (7认同)

小智 5

就我而言,bin 文件夹中是一个名为 Unity.MVC3 的非引用 dll,我尝试在 Visual Studio 中搜索对此的任何引用,但没有成功,因此我的解决方案非常简单,只需从 bin 文件夹中删除该 dll。


moh*_*asi 5

我遇到了同样的问题,我通过以下说明解决了它:

  1. 打开工具菜单并选择选项
  2. 在选项中,窗口转到项目和解决方案/Web 项目
  3. 查看 use the 64bit version of IIS ...

在此处输入图片说明