如何在Powershell二进制模块(.Net Standard和Nuget)中处理公共和私有依赖项和打包



我有一个示例项目https://github.com/hagatorn/LunarSolarDate这是预发布的,所以请原谅没有完成。

如果我构建项目,我可以导入bin目录中的模块:

Import-Module .SolarLunarName.PoSH.dll

然而,当运行唯一的命令时,我会看到一个错误。

Get-Date | Get-SolarLunarName
Get-SolarLunarName : Could not load file or assembly 'RestSharp, Version=106.6.2.0, Culture=neutral, 
PublicKeyToken=598062e77f915f75' or one of its dependencies. The system cannot find the file specified.
At line:1 char:12
+ get-date | Get-SolarLunarName
+            ~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [Get-SolarLunarName], FileNotFoundException
+ FullyQualifiedErrorId : System.IO.FileNotFoundException,SolarLunarName.PoSH.GetSolarLunarName 

这是相对容易解决弹出在bin目录中丢失的dll。随后出现了一条不太有用的消息,但添加了Newtonsoft。Json.dll和Newtonsoft。将Json.pdb移到bin目录中,我将在另一个问题中处理这个问题。

手动复制依赖关系让我有点担心,所以我开始尝试用nuget构建和部署依赖关系,并希望在这个模型中可以完全处理依赖关系。

将模块及其私有依赖项发布为已发布的nuget包后,我可以使用以下命令形成依赖项。

nuget.exe install SolarLunarName.PoSH 

然而,在它们的初始状态下,依赖项在目录结构中被逻辑分离,这使得二进制模块无法访问它们。

作为构建或包安装的集成部分,是否有更好的方法来实现这一点?powershell可以做一些包管理并使用.deps.json来安装公共依赖项吗?

我看到另一个线程讨论通过对嵌套依赖项进行伪调用,强制msbuild在bin目录输出中包含额外的二进制文件。尽管这个解决方案很方便,但它似乎有点错误,与包管理的逻辑相悖。依赖DLL未复制到Visual Studio 中的生成输出文件夹

还有以下线索,我承认,如果包管理确实工作正常,并且我误解了这个问题,那么这可能是同一个问题。PowerShell二进制模块程序集依赖项错误。

最后,还有另一个关于将您的包标记为"PSModule"的线索,我相信我已经在visualstudio项目属性包页面中做到了。但也许这不是实现这一目标的方法?

这个问题是由于缺乏具体的目标框架和未写入的依赖关系而引起的。Net标准,并有各种不同的包,当最终编译成目标框架时,它会呈现出来。

Rest Sharp的新版本可能已经发布,没有这个问题,但一些SQLite驱动程序和ORM仍然有这个限制。

最新更新