C# 无法加载文件或程序集';系统,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089';或者它的一个依赖项
我在一些用户机器上生成了此异常(~1/20): 无法加载文件或程序集的系统,版本=4.0.0.0, 区域性=中性,PublicKeyToken=b77a5c561934e089'或其 依赖关系。系统找不到指定的文件 我在网上和这个网站上找到了一些关于这个错误的参考资料,但没有任何帮助 我有一个外接程序应用程序,它使用WCF连接到服务器。VS 2008中使用.NET Framework 3.5构建的外接程序 在其中一台测试机器上,该错误仅在一个用户帐户中再现。我安装了我的应用程序,并且只能从这台机器上的一个帐户复制它,其他任何地方都可以正常工作。此外,它只能在我为其创建插件的主机应用程序的一个版本中复制(我假设它使用不同的.NET框架) 我已经检查了保险丝日志,我看到以下内容:C# 无法加载文件或程序集';系统,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089';或者它的一个依赖项,c#,.net,frameworks,C#,.net,Frameworks,我在一些用户机器上生成了此异常(~1/20): 无法加载文件或程序集的系统,版本=4.0.0.0, 区域性=中性,PublicKeyToken=b77a5c561934e089'或其 依赖关系。系统找不到指定的文件 我在网上和这个网站上找到了一些关于这个错误的参考资料,但没有任何帮助 我有一个外接程序应用程序,它使用WCF连接到服务器。VS 2008中使用.NET Framework 3.5构建的外接程序 在其中一台测试机器上,该错误仅在一个用户帐户中再现。我安装了我的应用程序,并且只能从这台机
因此,出于某些原因,它试图使用
v2.0.50727\mscorwks.dll
加载程序来加载System.dll的版本=4.0.0.0
。在构建机器上,我指的是您正在使用的.net 4的System.dll的2.0.0.0版本可能在客户端上只安装了“.net framework 4客户端配置文件”。尝试安装完整的软件包!!
我也遇到了同样的问题——一些用户可以从git中使用,一切都正常运行。有些人会拉,得到一个非常类似的异常:
无法加载文件或程序集“…、版本=…、区域性=中性、PublicKeyToken=…”或其依赖项之一。系统找不到指定的文件
在我的特殊情况下,它是AjaxMin,因此实际错误如下所示,但细节无关紧要:
无法加载文件或程序集“AjaxMin,Version=4.95.4924.12383,Culture=neutral,PublicKeyToken=21ef50ce11b5d80f”或其依赖项之一。系统找不到指定的文件
结果证明,这是对解决方案执行以下操作的结果:
已为解决方案启用NuGet程序包还原
添加了一个项目,并在其中安装了一个Nuget包(本例中是AjaxMin)
项目已移动到解决方案中的其他文件夹
Nuget软件包已更新为较新版本
慢慢地,但肯定地,这个bug开始出现在一些用户身上
原因是解决方案级别的packages/respositories.config保留了旧的项目引用,现在为移动的项目提供了新的第二个条目。换言之,在reorg之前,它有:
<repository path="..\Old\packages.config" />
<repository path="..\Old\packages.config" />
<repository path="..\New\packages.config" />
在reorg之后:
<repository path="..\Old\packages.config" />
<repository path="..\Old\packages.config" />
<repository path="..\New\packages.config" />
因此,第一行现在指的是一个项目,在磁盘上,不再是我的解决方案的一部分
启用Nuget Package Restore后,将读取两个packages.config文件,每个文件都指向各自的Nuget包和包版本列表。然而,直到Nuget软件包更新到新版本,才出现任何冲突
但是,更新Nuget包后,只有活动项目的存储库列表才会更新。NuGet Package Restore选择只下载库的一个版本,这是它在repositories.config中遇到的第一个版本,它是旧版本。编译器和IDE继续运行,就好像它选择了较新的一样。结果是运行时异常,表示DLL丢失
答案显然是从这个文件中删除引用了不在您的解决方案中的项目的任何行。在我的例子中,通过在web.config文件中设置Debug=true,我发现了ScriptManager的问题。我回答得太晚了,但在我的情况下它起了作用。如果您在项目中遇到此问题,请在您的web.config文件中添加以下行:
<compilation batch="false" >
这在我的情况下奏效了。如果您的web.config中已经有编译标记,则只向其添加batch=“false”属性。您可以启用NuGet软件包并更新DLL。让它工作。
或者,如果您知道解决方案所需的版本,您可以通过vs中的软件包管理器手动更新软件包。我是在将项目从.net 4.5降级到.net 3.5后获得此信息的
要解决此问题,我必须进入“项目-属性-设置”窗口并删除所有设置,保存项目,退出并重新启动visual studio,返回“项目-属性-设置”窗口并重新输入所有设置及其默认值,即使我遇到了一些更奇怪的事情,我可以看到GAC中没有加载dll的dll,但windows>模块显示加载的system.dll版本=4.0.0.0这对我来说很有效。
转到Project->Propertied->Target Frawork->将框架从3.5更改为4.0我在Linux下遇到了问题,我需要安装它们。我不知道是哪一个解决了这个问题,但在那之后错误就消失了:
apt-get install mono-utils mono-runtime-sgen mono-runtime-common \
mono-runtime-boehm mono-runtime-dbg mono-xbuild
我已经见过好几次了,通常通过在.NET Framework上运行修复程序(无论应用程序尝试使用哪个版本)来修复它。我只是更改了我的目标.NET Framework,它成功了。在我的例子中,我从.NET 4.7更改为.NET 4。
右键单击解决方案并选择“属性”
单击应用程序>>目标框架您指的是2.0版。然而,“目标框架”设定了什么价值?谢谢你的回答。目标框架设置为3.5。事实上,我正在使用一些库来实现3.5,比如序列化,所以我不能将目标设置为2.0。Solidworks不是您的程序。您也无法控制其.config文件。您是如何确定是您的外接程序生成了此跟踪的?那么.config文件是什么样子的呢?是的,你是对的,我没有控制SolidWorks。但是我可以处理异常(消息在本主题中),因此我知道哪个dll失败。