背景
我有两个用C#编写的软件,使用相同的第三方dll来获取电话功能。
问题
当我部署其中一个软件的新版本时,我还部署了新版本的dll。这个覆盖旧dll的引用,导致我的其他软件停止工作,因为新的dll不向后兼容。
尝试解决方案
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools> sn.exe -e" theDll.dll"键
Microsoft(R).NET Framework强名称实用程序,版本4.0.30319.17929 版权所有(c)Microsoft Corporation。保留所有权利。
theDll.dll不代表强名称程序集
这导致了一个"呵呵?"。这个dll运行良好,所以如果我不真的必须,我不想寻找新的供应商。
C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools> ildasm.exe" theDll.dll" /out=theDll.il
错误:' theDll.dll'没有有效的CLR标题,不能被反汇编
这似乎暗示dll是不受管理的,因此无法强烈命名(如果我没有弄错的话)。
问题
有没有人这样做了#34; LoadLibrary" -way并且可以验证它是否适用于需要实例化某些类的DLL?
有没有人有更好的解决方案?
答案 0 :(得分:0)
该指令告诉我如何为非托管COM构建适当的清单文件:https://msdn.microsoft.com/en-us/library/ms973913.aspx
一些重要的观点我不觉得它们被覆盖,所以我很容易理解:
Oleview.exe是获取清单所需信息的一种方法。可以使用 Object classes->找到你的dll。所有对象(假设它已通过regsvr32注册)或使用 File->查看TypeLib 。在我获得所有信息之前,我觉得这些都是必需的(它们显示不同的信息)。
当您拥有清单文件时,只需在Visual Studio中选择“添加引用”,选择“浏览”标签,然后选择您创建的COM清单即可。之后,编程就像COM已经注册一样。 VS将为您的程序创建清单。
当然,您需要确保您的安装项目将.dll及其清单部署到与.exe相同的文件夹中。