如何通过编程将typelib .tlb作为资源嵌入DLL中?

时间:2019-07-15 16:43:28

标签: c# .net com embedded-resource typelib

我正在为软件(即Autodesk Robot)编写插件。

软件的维护者已经制作了一个描述外接程序创建的文档,其中解释了以下步骤:

  

[1。至6.与配置写作和构建项目有关。]

     
      
  1. 然后File menu \ Open \ File->打开创建的dll文件(在我们的示例中为…\ MyAddin \ bin \ Debug \ MyAddin.dll)

  2.   
  3. 将创建的tlb库添加到dll(鼠标右键单击菜单),资源类型应命名为TYPELIB:

  4.   
     

Their illustration

     
      
  1. 使用“属性”(鼠标右键单击菜单)将TYPELIB编号更改为1
  2.   
  3. 关闭Visual Studio并将更改保存到dll文件
  4.   
  5. 将\创建的dll文件\复制到要使用的任何计算机上,将其定位在目标文件夹中后,请按以下方式注册:   以管理员身份打开命令提示符窗口   并通过命令注册:   c:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /tlb /codebase MyAddin.dll
  6.   

我正在尝试自动化生成和嵌入.tlb文件的过程。广泛阅读此书后,我发现this questionthe link to this blog post在接受的答案的注释中。

我已经向项目添加了.rc文件,创建了.tlb文件,将其中两个放置在项目的.\bin\Debug文件夹中,编译了.rc.res,最后将构建器指向我刚刚创建的该资源文件,以解决上述问题。

我的.rc文件内容如下:

1 TYPELIB "RobotOrientAddIn.tlb"

构建项目时,没有收到任何错误消息,但是如果我打开创建的dll文件,则在文件树中没有“ TYPELIB”资源的踪迹...不知道为什么!

阅读MS文档并没有太大帮助,因为我对.NET行话不太熟悉。

对此我感到非常困惑,如果有人可以提供帮助,我将不胜感激。最终,我想在构建后的事件中完成所有这些工作,以便在构建项目后不再需要人工摆弄。

1 个答案:

答案 0 :(得分:1)

我也在尝试自动化这个过程,以便于调试机器人插件,我得到了:

  1. 下载 NirCmd 并将其安装到您的 Windows 文件夹中。

  2. 在 Visual Studio 中添加 Post-Build 事件命令:

    "%Windir%\nircmd.exe" elevate "%Windir%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /tlb /codebase $(TargetFileName)
    echo 1 typelib $(TargetName).tlb > $(TargetName).rc
    nircmd.exe wait 5000
    "%ProgramFiles(x86)%\Windows Kits\10\bin\10.0.18362.0\x86\rc.exe" "$(TargetName).rc"
    nircmd.exe wait 5000
    "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe" "$(SolutionPath)" -property:Win32Resource="$(TargetDir)$(TargetName).res" -property:Configuration=Debug -property:Platform="Any CPU" -property:PostBuildEvent=
    "%Windir%\nircmd.exe" elevate "%Windir%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /tlb /codebase $(TargetFileName)
    

    1st 创建 tlb 文件。
    2nd 创建 rc 文件。
    第 3 次等待 5 秒,创建 tlb 文件(如果需要,增加)。
    4、将rc文件编译成Win32资源文件(.res).
    第 5 个(可选)等待 5 秒以确保在最终构建之前完成所有事情。
    使用 res 文件进行第 6 次重建。
    7th 使用嵌入式 tlb.
    .

    注册最终的 dll 文件

非常重要:检查 regasm.exe、rc.exe 和 MSBuild.exe 文件的路径,并根据需要进行修改。

然后你只需要像往常一样构建你的 dll,它就可以被 Autodesk Robot Add-Ins Manager 接受了。

这适用于 VS2019 和 Autodesk Robot 2020。

祝你好运