.net 是否可以通过路径而不是GUID引用托管项目中的COM DLL?
我有一个引用COM DLL的托管(实际上是asp.net)项目。现在,.csproj中的引用如下所示:.net 是否可以通过路径而不是GUID引用托管项目中的COM DLL?,.net,com,msbuild,.net,Com,Msbuild,我有一个引用COM DLL的托管(实际上是asp.net)项目。现在,.csproj中的引用如下所示: <COMReference Include="thenameinquestion"> <Guid>{someguidhere}</Guid> <VersionMajor>1</VersionMajor> <VersionMinor>0</VersionMinor> <Lcid>0&l
<COMReference Include="thenameinquestion">
<Guid>{someguidhere}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
</COMReference>
{someguidhere}
1.
0
0
tlbimp
这是可行的,但不幸的是,DLL需要在生成机器上注册,这意味着(除其他外)在同一生成机器上生成使用不同版本DLL的多个项目版本很不方便
MSDN显示的任务看起来是正确的,但我的谷歌搜索引擎还没有足够好,无法给出它的实际使用示例。有可能做我想做的吗?我走对了吗?本文介绍了如何实现COM组件的免注册激活。也许它会有帮助:正如您已经指出的,您正在寻找。关于这一点,已经有很多问题,寻找“手边的标签”和密切相关的标签 然而,您很容易就会看到,这可能是一个棘手的领域,尤其是:
- Windows XP上似乎存在影响此功能的错误,有关详细信息,请参阅。不过,热修复程序已经可用,只要您只针对受控环境(例如构建计算机),这可能就足够了
- 由于您的目标是ASP.NET,您应该知道,与桌面应用程序相比,这意味着您无法控制托管过程,托管过程可能因部署平台而异。这意味着要提供所需的应用程序清单来控制主机内COM组件的运行时绑定和激活并不容易(请参阅下一点了解可能的替代方案)
- ASP.NET 2.0似乎通过删除非托管组件的并排功能使事情变得更加复杂。我还没有找到这方面的官方消息来源,但这本书的作者似乎是知情的;他至少提供了一个解决方案,虽然看起来很复杂,但可能很脆弱
祝你好运,请告诉我们你是否成功 看起来这是不可能的-Visual Studio将只查看参考中提到的GUID,而不关心其中暗示的路径
我们的日常构建服务器也有类似的问题——除非注册了COM服务器,否则COM客户端将无法编译。我们刚刚将注册/注销添加到构建序列中-它注册(regsv32)组件,然后从命令行运行VS,并在VS完成后立即注销组件(regsvr32-u)。运行平稳。引用COM DLL时,Visual Studio会自动为其生成互操作程序集。我发现手动控制这个过程是将COM和.NET构建解耦的好方法
tlbimp.exe
为COM DLL创建自己的互操作程序集。有关命令行参数,请参见