我有一个包X,取决于另一个包Y.默认情况下(Visual Studio 2015 Upd3 + nuget 3.5)任何引用包X的项目也将参考包Y进行更新。问题是,X的客户根本不需要参考Y,因为包Y的API不是也不应该向客户公开。
因此,预期的行为如下:在添加对包X的引用之后,应该在构建时将包Y的内容复制到输出文件夹中,但不应将包Y添加到项目引用中。
有没有办法呢?
理论上我们可以将基础设施包Y的来源包含到我们的项目X中(两个项目都是MIT许可下的开源项目)但我更喜欢使用或多或少的标准方法。
我们需要它的案例:
我们正在调查的案例:nuget包含测试帮助程序,确保PDB文件与源(引用Microsoft.DiaSymReader
包)匹配。我们不希望所有测试项目都引用Microsoft.DiaSymReader
程序集。
或多或少的理论问题(目前不是问题但如果项目将投入生产将会成为问题):使用Roslyn编译和运行脚本的自定义脚本引擎。我们不希望在将使用我们的脚本引擎的所有项目中引用Roslyn程序集。
后者的情况要糟糕得多,因为我们无法将roslyn源合并到我们的项目中,显然,也不能将roslyn二进制文件作为我们软件包的一部分进行分发。
欢迎任何建议!
答案 0 :(得分:1)
您可以将Package Y的dll添加为Package X中的内容文件,这不会将Y dll添加到安装了Package X的项目中。
以下步骤显示如何使用Y dll创建包X作为内容文件。
现在,当您使用NuGet Package Explorer打开Package X.nupkg文件时,您会发现存储在内容文件夹中的Y dll。当您在其他项目上安装Package X时,Y dll将作为内容文件添加到项目中。构建项目后,Y dll将被复制到输出目录。
答案 1 :(得分:0)
由于您是程序包X的作者,因此您可以在nupkg
文件中包含所需内容。你也可以包括第三方dll。
虽然技术上可行,但我不建议这样做。想想你的软件包X的消费者,有一天他们可能会决定使用软件包Y.突然之间,他们会遇到运行时错误,因为X期望不同版本的Y.