2010-12-17 122 views
163

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

其他信息:无法加载 文件或组件 'Microsoft.Practices.Unity, 版本= 1.2.0.0,文化=中性 公钥= 31bf3856ad364e35' 或一个依赖的 之一。位于 程序集清单定义 与程序集引用不匹配。 (异常来自HRESULT:0x80131040)

我不知道是什么原因造成这种或如何,我可以调试它自己身上找原因。

我已经做了搜索我的解决方案目录的.csproj文件,每一个地方我有团结,我有:

参考 包括=“Microsoft.Practices.Unity, 版本= 2.0.414.0文化=中性, 公钥= 31bf3856ad364e35, ProcessorArchitecture用于= MSIL”

找不到任何地方的任何引用这在我的任何项目违背1.2.0.0。

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

我也希望提示如何调试这样的问题。

+1

可以在任何你引用的程序集是在旧'Unity'库使用了一些东西? – decyclone 2010-12-17 11:19:33

+3

也许......但我怎么才能找到哪个程序集?我的解决方案中有很多项目和很多潜在的嫌疑人......反复试验和错误bruteforce看起来有点没有希望...... – ronag 2010-12-17 11:21:47

+0

您只需查看项目中引用的程序集就会发现此错误。 – decyclone 2010-12-17 11:26:17

回答

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

  2. 可能是所有项目构建其装配体的输出文件夹,具有旧版本的统一性。

您可以使用FusLogVw找出谁是装载旧组件,只是定义路径日志,并运行您的解决方案,然后再检查(在FusLogvw),其中统一装配装在第一线,双击它并看到调用程序集,然后在这里。

+3

FuseLogVw的日志文件在哪里 – Stiger 2014-08-01 03:41:30

+1

为了避免必须查找日志文件,可以指定一个自定义日志路径:设置,勾选启用自定义日志路径复选框,输入自定义日志路径,刷新。 – RedGreenCode 2015-01-21 19:46:13

36

尝试清理解决方案中的调试和发布文件夹。然后删除并再次添加统一。

+2

这个问题可能是由很多事情造成的......您的解决方案解决了我的问题,并可能解决其他问题。 – 2011-09-29 01:19:27

+1

@ScottRippey这对我有用。我首先删除了所有的.pdb文件,然后重新加载我的项目并重建它。 – botenvouwer 2014-02-12 08:26:39

+0

非常感谢阿列克谢,为我创造了奇迹。我玩这个太久了。 – Jmnstr 2015-08-06 18:03:33

3

你说你在解决方案中有很多项目......好吧,从一个靠近构建顺序的顶端开始。获得一个构建,一旦你发现它,你可以对其余的应用相同的修复。

老实说,你可能只需要刷新你的参考。这听起来像是你更新了你的版本并且没有更新引用,或者如果你将你的解决方案保存在源代码控制中,这是一个相对路径问题。只要验证你的假设,并重新添加参考。

39

对我来说,其他的解决方案都没有工作(包括清理/重建战略)。我发现了另一种解决方法,即关闭并重新打开Visual Studio以关闭

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

+16

如果你不相信这会起作用,至少试试。直到我做完,我都无法相信它。 – 2015-01-27 13:40:10

+2

啊,你重新开始舞吧。 – 2017-05-30 07:15:48

+1

为我工作... – juFo 2018-03-02 08:53:29

4

不知道这是否有帮助。

检查组件名称中的组件名称和默认命名空间是否匹配。这解决了我的问题,产生了相同的错误。

12

微软企业库(引用.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> 

或者,你可能只想更新企业库到最新版本。

14

以下为我工作。

  • 删除临时文件C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \临时ASP.NET文件
  • 关闭VSTS并重新打开
  • 删除和添加相同的DLL(注意:添加相同的匹配版本)
1

您必须从您的输出文件夹中删除您的appname.dll文件。 清理调试和发布文件夹。 重建并复制到输出文件夹重新生成的dll文件。

2

I “设置为启动项目”卸载/未启动的库/项目。

然后部署它。

它的工作!

我认为它找不到.dll,因为它一开始并不在组件中。

4
  • 转到:解决方案 - >
  • 点击高级标签(查看下面的页面)
  • 添加您DLL附加组件(这样我们可以添加外部DLL在共享点)。
+5

我没有在我的VS2010项目中的“解决方案 - >包” – Muflix 2015-07-01 14:11:11

58

打开IIS管理器

选择应用程序池

然后选择您使用的

去高级设置池(在右侧)

变化的标志启用32位应用程序false为true。

+0

IIS - >选择每个ApplicationPool - >基本设置 - >检查是否在“.NET Framework版本”下拉菜单中选择了最新的框架 – Martin 2013-11-19 06:58:28

+0

这对我很好用 – Saravanan 2014-09-02 17:55:09

+0

你也可以在VS中右键点击你的项目。并删除偏好的32位复选标记 – 2014-10-12 06:57:09

1

如果您通过在Windows XP上打开应用程序来获取此错误消息,这意味着首先安装了该应用程序,原因是没有使用网络框架4和Service Pack 3,该应用程序无法正常工作。你安装了两个,然后再次出现这个错误,所以你应该重新安装该应用程序,但首先从添加和删除卸载

如果这不起作用请不要滥用我。我也是一个初中

1

好吧,这可能听起来很愚蠢,但继承人尝试了其他解决方案后,如何解决这个问题,并在这个愚蠢的事情上度过一个夜晚。

我收到了一些DLL文件夹丢失的错误。 我试图删除,从Team Foundation Server取回所有的东西,但没有奏效。 从我的office-matelocal机器中获取了Bin文件夹的副本,并将其替换。它也没有工作。 最后,我手动FTPed服务器,得到了显示为丢失的DLL的副本,然后它开始显示文件列表序列中的下一个文件丢失。

所以我ftped服务器得到所有Bin文件夹,手动逐个替换每个文件。 (不Ctrl +全部和替换..我试过:它没有工作。) 并以某种方式它的工作...

0

我有这个问题,其实很愚蠢的错误。 我已经为.dll文件指定了错误的位置,将位置更改为正确的位置后,加载正确发生(回答所以别人不会犯这个错误)。

5

我有类似的问题。 Junto答案将解决问题但你应该注意一个重要的提示!

在统一版本2.1.505.2不同的AssemblyVersion的AssemblyFileVersion设置:

enter image description here

的AssemblyFileVersion所使用的NuGet但CLR不关心的AssemblyFileVersion,它将只使用AssemblyVersion

所以对于版本2.1.505.2重定向应适用于在的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?

1

另一个可能的原因:确保你并没有在项目属性中意外给出两个项目相同的程序集名称。

1

以下为我工作。

  • 删除临时文件C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP。在临时文件Asp.net文件NET
    • 然后右键单击>属性>安全 分给IIS和所有用户完全控制访问乳宁我的项目
8

检查web.config /应用.config文件在您的项目中。看看版本号是否正确。

<bindingRedirect oldVersion="X.X.X.X-X.X.X.X" newVersion="X.X.X.X" /> 

这对我有效。

+1

这对我来说虽然它是web.config,而不是app.config – samneric 2018-01-12 02:50:23

1

我对.NET 4.0解决方案,使用企业库5,是添加引用:

Microsoft.Practices.Unity.Interception.dll

1

感谢Riddhi M. 继为我工作。

删除临时文件C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \临时ASP.NET文件 关闭VSTS并重新打开 删除和添加相同的DLL文件(注:您添加相同的匹配版本)

4

我也有这种可怕的错误,并发现了一个解决方案...

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

1),2)

Right Click on the Solution name

4),5)

Change Configuration to Release

希望这将有助于你还。

3

在我的情况下在bin文件夹中是一个名为Unity.MVC3的非参考dll,我试图在visual studio中搜索对此的任何引用而没有成功,所以我的解决方案非常简单,就像从bin文件夹中删除该dll一样。

1

注意有冲突的参考文献。即使在清理和重建之后,冲突的引用仍然会导致问题。我的问题是在AForge和Accord之间。我删除了两个引用,并重新添加引用,重新选择特定的引用(特别是对于我的案例,只是雅阁)。

1

对于我重建不使用Unity C#Proects Checkmark工作的统一游戏。

9

在99%无法加载文件或程序集或其依赖项之一问题是由依赖项引起的!我建议你遵循这个步骤:

  1. 下载的Dependency Walkerhttp://www.dependencywalker.com/

  2. 启动的Dependency Walker并打开DLL(在我的情况NativeInterfaces.dll

  3. 你可以看到一个或更多的DLL与错误红色错误打开文件...

  4. 这意味着你的系统中缺少这个DLL;在我的情况的DLL名称是MSVCR71.DLL

  5. 您可以下载missings从谷歌DLL和在正确的道路复制(在我的情况c:\windows\system32

  6. 在这一点上,你必须在GAC注册新的DLL(全局程序集缓存):打开DOS终端并写入:

    cd \Windows\System32 
    regsvr32 /i msvcr71.dll 
    
  7. 重新启动您的应用程序!

+8

依赖沃克是伟大的,但从互联网上随机的DLL复制到Windows是不太好。最好尝试找到提供这些DLL的安装程序。 – RJFalconer 2016-10-13 12:34:39

+0

没有为我显示任何内容。 – 2017-01-18 23:02:16

1

在我的情况下,没有一个建议的答案奏效。

这里是我工作:

  1. 取出参考
  2. 重命名的DLL
  3. 进口再次

第二步是重要的显然是没有工作的参考没有它。

1

尝试检查引用的“复制到本地”属性是否设置为true,并将特定版本设置为true。这与Visual Studio中的应用程序有关。

0

我的解决办法是:

我有一个三层应用我也忘了,在IIS也复制DLL到正确的道路。刚把它复制到正确的地方,它为我工作。

4

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

2

这个问题发生在我身上,其中一个依赖库正在编译一个带有“任何CPU”的DLL,当父库期望编译“x64”时。

0

我一直在Visual Studio 2015中的Web窗体项目中出现这个错误。我关闭Visual Studio,并杀死了ScriptedSandbox64.exe,Microsoft.VsHub.Server.HttpHostx64.exe,Microsoft.VsHub.Server.HttpHostx.exe * 32,Microsoft.VisualStudio.Web.Host.exe * 32进程,它似乎帮助解决问题。

0

我这有今天,在我的情况下,这个问题是非常奇怪:

<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> 

更改为上述和瞧!一切都有效。

5

尽管5年前发布的原始问题仍然存在,并且相当烦人。

通用解决方案是对所有引用的程序集进行全面分析,以了解发生了什么问题。为了使这个任务更容易,我制作了一个工具(一个Visual Studio扩展),它允许选择一个.Net程序集(.ddl或.exe文件),并获取所有引用程序集的高亮冲突或遗漏引用的图形。

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

例子: enter image description here

+0

不适用于Visual Studio的社区版本 – 2017-09-08 18:29:39

+0

我认为应该有另一个问题,与Visual Studio版本无关。我测试了VS 2017和VS 2015社区版本的扩展。其实它是通过VS 2017社区版开发的。 – marss 2017-09-09 19:22:20

+0

啊哈。你有没有安装其他扩展程序?此页面说明VS社区不支持DGML:https://msdn.microsoft.com/en-us/library/hh871439.aspx#VersionSupport – 2017-09-09 20:17:03

相关问题