【问题标题】:Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies无法加载文件或程序集“系统,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”或其依赖项之一
【发布时间】:2013-07-12 23:41:48
【问题描述】:

我在一些用户机器上产生了这个异常(大约 20 个):

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

我在网络和这个网站上发现了几个关于这个错误的引用,但没有任何帮助。

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

只有一个用户帐户可以在其中一台测试机器上重现该错误。我安装了我的应用程序,并且只能从这台机器上的一个帐户复制它,其他任何地方都可以正常工作。此外,它只能通过我为其创建插件的一个版本的主机应用程序来重现(我假设是因为它使用了不同的 .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 加载程序来加载System.dllVersion=4.0.0.0。在构建机器上,我指的是 System.dll 的 2.0.0.0 版本。

【问题讨论】:

  • 您指的是2.0版本。然而,“目标框架”的价值是多少?
  • 感谢您的回答。目标框架设置为 3.5。事实上,我正在使用一些库到 3.5,比如序列化,所以我不能定位到 2.0。
  • Solidworks 不是您的程序。您也无法控制其 .config 文件。你是如何确定是你的插件产生了这个痕迹? .config 文件是什么样的?
  • 是的,你说得对,我不是在控制 SolidWorks。但我可以处理异常(消息在本主题的主题中),所以我知道哪个 dll 失败了。此外,我比较了加载 SolidWorks 以及我的插件和不加载时生成的日志。这个失败的日志报告的区别之一。这是我的 app.config 文件的一部分。剩下的就是应用设置和绑定设置:

标签: c# .net frameworks


【解决方案1】:

我刚刚更改了我的目标 .net 框架,它工作正常。在我的情况下,我从 .net 4.7 更改为 .net 4。 右键单击您的解决方案并选择属性 selct properties

点击应用>>目标框架

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      apt-get install mono-utils mono-runtime-sgen mono-runtime-common \
                      mono-runtime-boehm mono-runtime-dbg mono-xbuild
      

      【讨论】:

        【解决方案4】:

        这对我有用。 转到 Project->Propertied->Target Frawork->Change frame work like 3.5 to 4.0

        【讨论】:

          【解决方案5】:

          即使我遇到了一些更奇怪的事情,我也可以看到 GAC 中没有 dll 从加载 dll 但 windows > 模块显示 system.dll version=4.0.0.0 加载

          【讨论】:

            【解决方案6】:

            我遇到了同样的问题 - 一些用户可以从 git 中提取并且一切运行良好。有些人会拉取并得到一个非常相似的异常:

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

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

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

            原来是对解决方案执行以下操作的结果:

            1. 已为解决方案启用 NuGet 包还原。

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

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

            4. Nuget 包已更新至较新版本。

            这个错误开始缓慢但肯定地开始出现在一些用户面前。

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

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

            重组后的这个:

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

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

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

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

            答案显然是从该文件中删除所有引用了不在您的解决方案中的项目的行。

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                【解决方案8】:

                您可以启用 NuGet 包并更新您的 dll。让它工作。 或者,如果您知道解决方案所需的版本,您可以通过 vs 中的包管理器手动更新包。

                【讨论】:

                  【解决方案9】:

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

                  <compilation  batch="false" >
                  

                  这在我的情况下有效。如果你的 web.config 中已经有编译标签,那么只添加 batch="false" 属性。

                  【讨论】:

                  • 这个配置有什么作用?
                  【解决方案10】:

                  就我而言,我可以通过在 web.config 文件中设置 Debug=true 来找到 ScriptManager 的问题

                  【讨论】:

                    【解决方案11】:

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

                    【讨论】:

                    • 不,我没有使用 .NET 4 Framework(我的目标是 3.5),但我的加载项是在 Framework 4.0 下运行并基于错误描述是由于某些原因寻找版本 4.0.0.0。如果我以不同的用户身份登录同一台机器并使用相同的加载项运行相同的主机应用程序,则更是如此。从日志中我看到 v4.0 clr.dll 加载器正在使用,它成功加载了 system.dll 的 4.0.0.0 版本。我试图修复框架,但没有帮助。也许再次重新安装。感谢您的建议。
                    • 得到我的 +1 你是对的,兄弟。在某些 MS Windows XP 系统上。* 4.0.0.0 由于这个原因而丢失。好收获!
                    猜你喜欢
                    • 2018-11-25
                    • 2019-03-18
                    • 2017-07-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-11-20
                    • 2016-11-07
                    • 2016-12-04
                    • 1970-01-01
                    相关资源
                    最近更新 更多