我正在尝试创建一个打包另一个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安装软件包的方式所致,据我所知,您无法更改它。