我有一个引用 COM DLL 的托管(实际上是 asp.net)项目。现在,.csproj 中的引用如下所示:
<COMReference Include="thenameinquestion">
<Guid>{someguidhere}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
</COMReference>
这可行,但不幸的是,DLL 需要在构建机器上注册,这意味着(除其他外)在同一构建机器上构建使用不同版本 DLL 的项目的多个版本很不方便。
MSDN 显示 ResolveComReference看起来它做正确的事情的任务,但我的 google-search-fu 还不够好,无法提供其使用的实际示例。有可能做我想做的事吗?我在正确的轨道上吗?
最佳答案
当您引用 COM DLL 时,Visual Studio 会自动为其生成一个互操作程序集。我发现手动控制这个过程是解耦 COM 和 .NET 构建的好方法。
tlbimp.exe
为 COM DLL 创建您自己的互操作程序集.见 MSDN用于命令行参数。 完成此操作后,您不再需要在构建 .NET 解决方案时在计算机上注册 COM DLL,只需要您的互操作程序集。
互操作程序集可以永久保存在文件夹中,直到 (a) COM DLL 破坏二进制兼容性,或 (b) .NET 代码实际使用的 COM 接口(interface)发生更改。
如果您有所有二进制兼容的不同版本的 COM DLL,则针对包含 .NET 代码所需接口(interface)的最早版本编译互操作程序集。然后,您不必为不同版本更新互操作程序集。
此外,如果您可以假设 COM DLL 已安装在目标计算机上,则无需在安装程序中包含 COM DLL。
关于.net - 是否可以通过路径而不是 GUID 在托管项目中引用 COM DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106309/