c# - 使用新的 .net dll 更新应用程序会给我 FileLoadException?

标签 c# .net-3.5 building fileloadexception

我有一个包含许多 dll 的 .net 3.5 应用程序,我试图在不构建整个应用程序的情况下重建特定的 dll,但是在用新的替换旧的之后,应用程序抛出异常,因为它无法加载新的 dll 异常(exception): System.IO.FileLoadException:无法加载文件或程序集.... 我知道它搜索具有特定版本和公共(public) token 的程序集,如何在不重新构建应用程序的情况下解决这个问题?该应用程序也已签署但未在 GAC 中注册。 附言: 我怎样才能跳过再次构建应用程序,或者它是必须的,因为 dll 是重建的?

最佳答案

您收到错误的原因是因为您的程序集已签名,并且您对它的引用很可能将特定版本属性设置为 True,并且您对其进行更改的程序集的版本号已更改。我尝试了很多方案,这是我能够获得 FileLoadException 的唯一方案。如果您已将 Target Framework 更改为较新的版本,如 4.0,您将得到 BadImageFormatException。即使您说您没有更改版本号,无论如何也要检查它,或者通过选择您的引用并将特定版本设置为 False,然后右键单击并选择属性。

您的异常可能如下所示:

Could not load file or assembly 'LoadedAssembly, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=889080b75eb3bad2' or one of its dependencies. The located assembly's manifest
definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

但如果被引用的程序集不再是 1.0.0.0(或任何版本,例如),则您的编译版本。在下图中(很小),您可以看到引用属性正在寻找版本 1.0.0.0,特定版本设置为 True,并且引用程序集已签名并且实际上是版本 2.0.0.0,因此导致 FileLoadException。

通过改回版本号并重新编译,或将特定版本设置为 False 并仅重建该 DLL 来解决此问题。您不必重建整个应用程序。

enter image description here

关于c# - 使用新的 .net dll 更新应用程序会给我 FileLoadException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454382/

相关文章:

C# 3.5 分部类 String IsNullOrWhiteSpace

c# - 在 C# 中使用 .NET 3.5 将数据集转换为 JSON

c - 使用 -D 构建 C 代码时出错

c++ - 如何使用boost asio

c# - 所有文本转语音安装的语音均未显示

c# - Xamarin Forms 的本地通知?

c# - .NET 防火墙权限

dynamic-linking - 切换到动态链接

c# - 获取数字的特定部分 c#

c# - 创建泛型泛型的集合 - 字典协方差