0

我对我的项目使用的辅助 DLL 进行了更改,当然构建了它,将旧版 DLL 重命名为 *.dll_old,并将新版本的 DLL 复制并粘贴到同一文件夹中。

但是,当我随后运行使用 DLL 的应用程序时,它出错了:

"An expected error has occurred...bla bla bla...or select Details for more information.

我确实选择了详细信息,并看到:

TypeLoadException
File or assembly name <name of the DLL, which I just replaced>
Version=<bla>
Culture=neutral
PublicKeyToken=null, or one of its dependencies, was not found.

更新

根据评论,我想替换 DLL 比人们预期的要多。我不知道这是否重要,我认为替换 DLL 就像替换 EXE,但可能不是:DLL 项目的 AssemblyInfo.cs 说,

[assembly: AssemblyVersion("1.3.*")]                // used by .NET framework only
[assembly: AssemblyFileVersion("1.3.0.308")]        // File Version - increment here
[assembly: AssemblyInformationalVersion("6.3.0")]   // Product version - set to current IEQ system

...并且错误消息中的版本是“1.3.3889.27539”

我是否需要将这些行之一(如果是的话,我猜是中间行)更新为该值(1.3.3889.27539)?或者...???

更新

因此,由于 .DLL 没有强命名,我尝试简单地删除使用 DLL 的项目中的引用(对旧 .DLL),然后再次将其添加回来(相同的文件名,不同的版本)。不过,我看到更新 .DLL 不会更改上面显示的版本号 - IOW,AssemblyInfo.cs 在构建时不会更新。应该是?我需要手动更新这些 vals 吗?

4

1 回答 1

2

您的 EXE 文件似乎引用了原始 DLL 中的类型。当您将其替换为您自己的版本时,引用被弄乱了。EXE 文件包含元数据表,其中包含它引用的类型、方法、属性等列表以及预期的汇编的确切版本。即使一切都一样,但版本号根本就不是一回事,也提供其他东西。这就是为什么你得到例外。

更新:是的,这是可能的。但是,它涉及创建清单文件。有关更多信息,请查看有关Redirecting Assembly Versions的 MSDN 网站。另外,请记住,只能重定向强签名的程序集。未签名的程序集将被忽略。

于 2013-03-02T00:15:07.170 回答