最干净的方法将所有必需的DLL包含在单个nuget包中?

时间:2019-02-14 15:22:18

标签: c# powershell dll nuget

我正在尝试创建一个打包另一个C#主库项目的二进制PowerShell模块的nuget包。我正在努力将所有必需的DLLs包含在生成的nuget程序包中,因为主库具有很多未包含的nuget程序包依赖项。

我希望nuget包既包含两个项目DLL文件,又包含主库所需的DLL文件的原因是,我可以为二进制PowerShell模块创建一个psd1文件,该文件将在{下包含所有必需的DLL。 {1}}字段。这是必需的,因为在导入主二进制PowerShell模块DLL文件之前,必须先导入所有必需的DLL。

以下是我正在寻找的包装结构:

RequiredAssemblies

一旦安装了nuget软件包,我就应该可以打电话给Package - lib - netstandard2.0 - PowerShellModule.dll - PowerShellModule.psd1 - MainLibrary.dll - MainLibraryDep1.dll - MainLibraryDep2.dll - ... 并且可以使用了。

在二进制PowerShell模块项目文件夹中使用Import-Module "Package\lib\netstandard2.0\PowerShellModule.psd1"时,它会在最终程序包中成功包含二进制PowerShell模块DLL和主库DLL,但没有主库具有的nuget依赖项。有什么办法可以包含这些?

我想到的一个解决方案是简单地构建PowerShell二进制模块,并确保它生成了所有必需的DLL(包括用于主库的DLL),将这些文件复制到一个文件夹中并打包该文件夹,但是这看起来很hacky,没有什么用我真的很想做。

我也意识到,我真的应该只将二进制PowerShell模块项目构建为一个独立的nuget程序包,该程序包依赖于主库,而该库又具有所有依赖项,但是这意味着在每个安装完所有程序包之后psd1文件中的RequiredAssemblies字段必须使用nuget pack -IncludeProjectReferences跳出当前目录几次,以便它可以进入其他依赖包之一来导入其dll文件。这是由于nuget安装软件包的方式所致,据我所知,您无法更改它。

0 个答案:

没有答案