为什么找不到替换.DLL?

时间:2013-03-01 23:37:55

标签: c# dll deployment windows-ce typeloadexception

我对我的项目使用的辅助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在构建时不会更新。应该是?我是否需要手动更新这些val?

1 个答案:

答案 0 :(得分:1)

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

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