[英]How to handle public and private dependencies and packaging in Powershell binary module (.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”的线索,我相信我已经在 Visual Studio 项目属性包页面中做到了这一点。 但也许这不是实现这一目标的方法?
这个问题是由于缺乏具体的目标框架和依赖项不是用 .Net Standard 编写的,并且在最终编译到目标框架时会出现各种不同的包。
较新版本的 Rest Sharp 可能已经发布,它没有这个问题,但是一些 SQLite 驱动程序和 ORM 仍然有这个限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.