我有一个托管(实际上是asp.net)项目,它引用了一个COM DLL.现在,.csproj中的引用如下所示:
<COMReference Include="thenameinquestion">
<Guid>{someguidhere}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
</COMReference>
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它有一个令人遗憾的结果,DLL需要在构建机器上注册,这意味着(除其他外)在同一构建机器上构建使用不同版本的DLL的项目的多个版本是不方便的.
MSDN显示ResolveComReference任务看起来它做的正确,但我的google-search-fu还不够好,无法提供其使用的实际示例.有可能做我想要的吗?我是在正确的轨道上吗?
引用COM DLL时,Visual Studio会自动为其生成互操作程序集.我发现手动控制这个过程是解耦COM和.NET构建的好方法.
tlbimp.exe.有关命令行参数,请参阅MSDN.执行此操作后,您不再需要在构建.NET解决方案时在计算机上注册COM DLL,只需要您的互操作程序集.
互操作组件可以坐在永远不变,直到为(a)的COM DLL中断二进制兼容性,或(b)的COM接口做出改变,该.NET代码实际上使用这样的时间的文件夹.
如果您有不同版本的COM DLL,它们都是二进制兼容的,那么请根据包含.NET代码所需接口的最早版本编译互操作程序集.然后,您将不必更新不同版本的互操作程序集.
此外,如果您可以假定COM DLL已经安装在目标计算机上,则无需在安装程序中包含COM DLL.
正如John Fisher已经指出的那样,您正在寻找免注册 COM Interop。已经有很多与此相关的问题,请查找“手头标签” regfreecom以及密切相关的标签sxs。
然而,您很容易发现这可能是一个棘手的领域,特别是:
总结一下,我想强调“免注册 COM 互操作”非常有帮助,可以大大简化许多场景。但对于您的特定场景和环境(托管 ASP.NET)来说,它可能不会让事情变得更容易,甚至根本不可能。
祝你好运,请让我们知道你是否成功!
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |