如何将.tlb作为资源文件嵌入到.NET程序集DLL中?

13

我们通过COM(CCW)在本地C++中使用我们的.NET Assembly DLL。每当我制作DLL的新版本时,我必须将两个文件(.dll和相应的.tlb)发送给正在使用它的团队。

是否可以将.tlb文件嵌入到.NET DLL文件中作为资源?


1
与下面的答案相同步骤,但来自 MSDN:http://msdn.microsoft.com/en-us/library/ww9a897z.aspx - yzorg
1个回答

11
在Visual Studio .NET中完成这个操作并不是十分直观,但仍然可以完成。在基本层面上,您需要执行以下操作:
  1. 生成TLB文件,例如 "YourLibrary.tlb"。

  2. 使用文本编辑器(如记事本、Visual Studio 中的文件/新建文件/文本文件)创建一个名为"YourLibrary.rc"的Win32资源脚本文件。

  3. 在脚本文件中逐字输入以下文本(但要替换实际的TLB文件名):

    1 typelib "YourLibrary.tlb"

  4. 将脚本文件保存到与TLB文件相同的文件夹中。

  5. 从Visual Studio命令提示符中,切换到包含脚本文件的文件夹,并使用以下命令编译它:

    rc YourLibrary.rc

    这将在相同的文件夹中生成一个名为“YourLibrary.res”的Win32资源文件。

  6. 在Visual Studio中,右键单击解决方案资源管理器中的项目节点(例如 "YourLibrary"),然后选择属性。

  7. 在应用程序选项卡上,在 "资源" 下,选择 "资源文件" 选项,并浏览到第5步中的 "YourLibrary.res" 文件。

  8. 保存并重新构建项目。

这样,TLB将被嵌入到DLL中作为资源,以便其他COM应用程序可以读取它。

如果稍后重新生成TLB文件,则需要重复第5步来重新编译资源文件,并重复第8步将新版本嵌入到DLL中。

话虽如此,您也可以通过生成事件或将自定义MSBuild目标放入项目文件中来自动化部分操作,但这是另一个讨论的话题。


根据您的回答,我已经编写了一个Post-Build事件来自动化构建和嵌入.tlb:http://thoughtandcode.blogspot.ru/2015/05/sole-com-for-you-chapter-3.html - Mikhail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接