【发布时间】:2019-11-24 09:46:33
【问题描述】:
我正在为软件(即 Autodesk Robot)编写插件。
该软件的维护人员制作了一份描述插件创建的文档,其中解释了以下步骤:
[1.到 6. 是关于配置写作和构建你的项目。]
然后
File menu \ Open \ File-> 打开创建的 dll 文件(在我们的示例中为 ...\MyAddin\bin\Debug\MyAddin.dll)将创建的
tlb库添加到dll(鼠标右键菜单),资源类型应命名为TYPELIB:
- 使用属性(鼠标右键菜单)将 TYPELIB 编号更改为 1
- 关闭 Visual Studio 并将更改保存到 dll 文件
- 将创建的
dll文件复制到您要使用的任何计算机上,在目标文件夹中找到它后,请以这种方式注册: 以管理员身份打开命令提示符窗口 并通过命令注册:c:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /tlb /codebase MyAddin.dll
我正在尝试自动化生成和嵌入.tlb 文件的过程。在广泛阅读后,我发现 this question 和 the link to this blog post 在已接受答案的 cmets 中。
我在我的项目中添加了一个.rc文件,创建了.tlb文件,将它们两个放在项目的.\bin\Debug文件夹中,将.rc编译为.res,最后指出我刚刚创建的这个资源文件的构建器,正如上面提到的问题的答案所建议的那样。
我的.rc文件内容如下:
1 TYPELIB "RobotOrientAddIn.tlb"
当我构建我的项目时,我没有收到任何错误消息,但如果我打开创建的 dll 文件,文件树中没有“TYPELIB”资源的痕迹......而且我没有知道为什么!
阅读 MS 文档并没有多大帮助,因为我不太熟悉 .NET 行话。
我对此感到非常困惑,如果有人可以提供帮助,我将不胜感激。最终,我想在构建后的事件中完成所有这些,以便在构建项目后无需手动摆弄。
【问题讨论】:
-
您是否真的要从 .NET 项目构建 .rc 文件? .rc 文件仅适用于 C++ 项目。因此,您可以构建 tlb,但您必须将其添加到 .NET 最终二进制文件中,如帖子步骤 6->8 中所述
-
@SimonMourier 这可以解释原因,谢谢。有没有办法以编程方式做到这一点?我喜欢编程不要两次做同样的事情!
-
“将构建器指向此资源文件”步骤出现问题。这只是没有用,只会让图书馆的用户陷入困境。嵌入类型库对于可以使用 regsvr32.exe 注册的那种 DLL 很有用。所以不是 C# 库。你需要regasm.exe来生成和注册类型库,如图,就够了。理想情况下,它是由安装程序完成的。所有安装程序构建实用程序都可以做到这一点,通常只需点击而不是编程。
-
@HansPassant 谢谢。我不明白为什么该软件需要嵌入式类型库,但如果没有按照文档中的描述嵌入,则无法识别加载项。我将有一个安装程序,但现在我想自动化构建过程。我认为可以通过 GUI 访问的任何内容也可以作为终端命令使用。也许我要求太多了?
-
@SimonMourier 很抱歉坚持,但我发现了这个:docs.microsoft.com/en-us/previous-versions/dotnet/… 似乎
rc文件可以在 VB .net 项目中使用。我理解正确吗?
标签: c# .net com embedded-resource typelib