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

Tem*_* T. 31 .net c# frameworks

我在某些用户计算机上生成了这个异常(约20个中的1个):

无法加载文件或程序集'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.
Run Code Online (Sandbox Code Playgroud)

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

任何帮助深表感谢.

谢谢,阿尔乔姆

Chr*_*ini 5

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

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

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

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

事实证明这是对解决方案采取以下行动的结果:

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

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

  3. 项目已移至解决方案中的不同文件夹.

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

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

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

  <repository path="..\Old\packages.config" />
Run Code Online (Sandbox Code Playgroud)

在重组之后:

  <repository path="..\Old\packages.config" />
  <repository path="..\New\packages.config" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Cad*_*rry 1

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