我有一个包含许多 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 来解决此问题。您不必重建整个应用程序。
关于c# - 使用新的 .net dll 更新应用程序会给我 FileLoadException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454382/