无法加载文件或程序集'System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一

时间:2013-07-15 07:15:48

标签: c# .net frameworks

我在某些用户计算机上生成了此异常(~1 of 20):

  

无法加载文件或程序集'System,Version = 4.0.0.0,   Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个   依赖。系统找不到指定的文件。

我在网站和本网站上发现了几个对此错误的引用,但没有任何帮助。

我有一个使用WCF连接到服务器的加载项应用程序。使用带有VS 2008的.NET Framework 3.5构建的加载项。

只有一个用户帐户可以在其中一台测试计算机上重现该错误。我安装我的应用程序,只能从这台机器上的一个帐户重现这个,除此之外它工作正常。此外,只有一个版本的主机应用程序可以重现,我为其创建了加载项(我假设它使用了不同的.NET框架)。

我检查了保险丝日志,我看到以下内容:


Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll
Running under executable  C:\Program Files\SolidWorks Corp\SolidWorks\sldworks.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Home\User
LOG: DisplayName = System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 (Fully-specified)
LOG: Appbase = file:///C:/Program Files/SolidWorks Corp/SolidWorks/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.

因此,由于某些原因,它尝试使用v2.0.50727 \ mscorwks.dll加载程序加载版本= 4.0.0.0的System.dll。在构建机器上,我指的是System.dll的2.0.0.0版本

非常感谢任何帮助。

谢谢, 阿尔乔姆

11 个答案:

答案 0 :(得分:5)

我遇到了同样的问题 - 有些用户可以从git中获取并且一切正常。有些人会拉扯并得到一个非常相似的例外:

  

无法加载文件或程序集'...,Version = ...,Culture = neutral,PublicKeyToken = ...'或其依赖项之一。系统找不到指定的文件。

在我的特定情况下,它是AjaxMin,所以实际错误看起来像这样,但细节无关紧要:

  

无法加载文件或程序集'AjaxMin,Version = 4.95.4924.12383,Culture = neutral,PublicKeyToken = 21ef50ce11b5d80f'或其依赖项之一。系统找不到指定的文件。

原来,这是对解决方案采取以下行动的结果:

  1. 为解决方案启用了NuGet Package Restore。

  2. 添加了一个项目,并在其中安装了Nuget包(在本例中为AjaxMin)。

  3. 项目已移至解决方案中的其他文件夹。

  4. Nuget包已更新为新版本。

  5. 慢慢但肯定地,这个错误开始出现在一些用户身上。

    原因是解决方案级别的packages / respositories.config保留了旧的Project引用,现在有一个新的第二个条目用于移动的Project。换句话说,它在重组之前有这个:

      <repository path="..\Old\packages.config" />
    

    这是在重组之后:

      <repository path="..\Old\packages.config" />
      <repository path="..\New\packages.config" />
    

    所以第一行现在指的是一个项目,在磁盘上,不再是我的解决方案的一部分

    启用Nuget Package Restore后,两个packages.config文件都被读取,每个文件都指向他们自己的Nuget包和包版本列表。然而,在将Nuget包更新为更新版本之前,没有任何冲突。

    但是,一旦更新了Nuget软件包,只有活动的Projects会更新其存储库列表。 NuGet Package Restore选择只下载一个版本的库 - 它是在repositories.config中遇到的第一个版本,它是较旧的版本。编译器和IDE继续进行,就好像它选择了较新的一样。结果是运行时异常,说DLL丢失了。

    答案显然是删除此文件中引用不在解决方案中的项目的任何行。

答案 1 :(得分:1)

您使用的是.net 4吗? - 也许在客户端上只安装了“.net framework 4客户端配置文件”。尝试安装完整包!! Download here

答案 2 :(得分:1)

我将项目从.net 4.5降级到.net 3.5后得到了这个。

要解决我必须进入项目 - 属性 - 设置窗口并删除我的所有设置,保存项目,退出并重新启动visual studio,返回项目 - 属性 - 设置窗口并重新输入我的所有设置及其默认值

答案 3 :(得分:0)

在我的情况下,通过在web.config文件中设置Debug = true,我能够找到ScriptManager的问题

答案 4 :(得分:0)

我的答案太晚了,但它在我的案例中有效。如果您在项目中遇到此问题,请在您的web.config中添加以下行:

<compilation  batch="false" >

这适用于我的情况。如果您的web.config中已经有编译标记,则只向其添加batch =“false”属性。

答案 5 :(得分:0)

您可以启用NuGet包并更新您的dll。这样才有用。 或者,如果你知道解决方案需要哪个版本,你可以通过你的vs中的软件包管理器手动更新软件包。

答案 6 :(得分:0)

即使我遇到了一些更奇怪的事情,我可以看到GAC中没有dll从dll加载的地方但是windows&gt;模块显示system.dll版本= 4.0.0.0已加载

答案 7 :(得分:0)

这对我有用。 转到项目 - &gt;属性 - &gt;目标框架 - &gt;更改框架工作,如3.5到4.0

答案 8 :(得分:0)

我在Linux下遇到了问题,我需要安装它们。我不知道哪一个确实解决了问题,但那之后错误消失了:

{{1}}

答案 9 :(得分:0)

我已经看过几次了,通常可以通过在.NET Framework(应用程序尝试使用的哪个版本)上运行修复程序来修复。

答案 10 :(得分:0)

我只是更改了我的目标.net框架,但它确实起作用。就我而言,我从.net 4.7更改为.net 4。 右键单击您的解决方案,然后选择属性 selct properties

点击应用程序>>目标框架