NuGet 可以分发 COM dll 吗?

Posted

技术标签:

【中文标题】NuGet 可以分发 COM dll 吗?【英文标题】:Can NuGet distribute a COM dll? 【发布时间】:2011-08-27 14:10:40 【问题描述】:

是否可以使用 NuGet 分发 COM DLL?

我将如何设置软件包?

我想我可以将 DLL 放在 Tools 目录中,然后运行安装后脚本来注册库,但我不太擅长 PowerShell。

是否有任何在线示例说明如何执行此操作(如果可能)?

【问题讨论】:

【参考方案1】:

当我遇到类似问题时,我创建了一个具有以下结构的 NuGet 包。

库 MYCOMLib.dll 工具 mycom.dll install.ps1

MYCOMLib.dll 是从 mycom.dll 与 Type Library Importer (tlbimp.exe) 生成的互操作 DLL。 只需使用以下命令即可完成:

Tlbimp mycom.dll

install.ps1 包含以下代码:

param($installPath, $toolsPath, $package, $project)

regsvr32 Join-Path $toolsPath '\mycom.dll' /s

$project.Object.References | Where-Object  $_.Name -eq "MYCOMLib"  |  ForEach-Object  $_.EmbedInteropTypes = $false 

此脚本的作用是注册 COM dll 并将引用的 EmbedInteropTypes 属性设置为 false,这在使用 .NET 4 时是必需的。有关详细信息,请参阅Interop type cannot be embedded。

【讨论】:

我希望我也能接受你的回答。这确实有帮助。 也许问了一个愚蠢的问题,但我需要手动运行 install.ps1 PS 脚本才能使其生效,还是由 NuGet 安装过程自动运行? @WillMarcouiller nuget 将在安装过程中运行它,如果您将 install.ps1 放在 nupkg 的工具文件夹中。

以上是关于NuGet 可以分发 COM dll 吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该将 NuGet 包 dll 添加到源代码管理?

Unity 中的 NuGet 包

我可以在 DLL 中嵌入其他文件吗?

vs 如何将dll打包到exe中

如何本地调试nuget发布的dll

可以将免注册 COM 应用于 DLL 吗?