【问题标题】:Distributing projects that reference NuGet packages分发引用 NuGet 包的项目
【发布时间】:2014-11-16 08:45:14
【问题描述】:

我有一个产品,它本质上是一个开发工具包——一组用于特定目的的 .NET 程序集(仅编译)。产品安装还包括使用示例,我以 Visual Studio 项目的形式以源代码形式分发。其中一些示例引用了其他 NuGet 包(未在产品本身中使用)。具体来说,它是 Rx-Main 包(用于 Microsoft Reactive Extensions),但也可以是其他东西。

在我的测试中,我从示例中引用了这个包,确认了许可条件,观察了它添加到项目结构中的所有文件(包括为许多平台构建的包程序集),然后将它们包含在我的安装中。这可行,但有以下问题:

1) 我不确定以这种方式重新分发包是否符合许可条件。作为最低要求,我希望最终用户在 Visual Studio 中打开项目时被要求重新确认包许可条件,但这并没有发生。

2) 软件包二进制文件不必要地包含在安装中,使其变得更大。我可以放心地假设用户有 Internet 连接并且可以下载包。因此,我宁愿只分发对包的“参考”。只有当用户真正需要该示例时,他才会下载参考包。

我试图通过从项目/安装中删除“包”目录并仅保留 packages.config 文件(似乎包含包标识/引用)来做到这一点。我希望当在 Visual Studio 中打开这样的项目时,该包将被检测为丢失并重新下载等。但它不起作用 - 它只是抱怨缺少程序集(那些应该来自引用的包的程序集),并使没有尝试加载包。

因此,问题是,我如何分发引用 NuGet 包的 Visual Studio 项目(以源代码形式),而不实际分发包本身?

【问题讨论】:

    标签: visual-studio nuget


    【解决方案1】:

    您很可能正在寻找 NuGet 的 package restore feature

    【讨论】:

    • 哦,太好了,是的。看来我需要“自动包还原”选项。我没有发现的原因是我故意在VS2012中有我的例子并在VS2012中进行了测试。看来VS2012有一个较早版本的NuGet没有这个功能(或者没有完整的,当然可用的部分默认是关闭的)。在 VS2013 中,默认情况下全部启用,根据您提供的 MSDN 链接,它应该完全符合我的预期。我接受了答案,虽然我还没有测试过......
    • @ZbynekZ 我相信更新 NuGet 扩展应该足够了。我已经看到即使在 VS2010 中也可以使用包恢复功能。
    • 你说得对,这取决于 NuGet 版本,而不是 VS 版本。在 VS2012 中更新 NuGet 使其工作。这揭示了我应该在原始问题中提到的一个“隐藏”要求:我希望它与“开箱即用”安装一起使用。而且,在 VS2012 中并非如此。我知道更新 NuGet 扩展并启用必要的选项可以解决问题,但如果没有它我会更高兴。无论如何,我认为它已解决,因为在 VS2013 中它是开箱即用的,而 VS2012 正在逐步淘汰,我可以为 VS2012 记录它。
    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2020-03-04
    • 2015-03-26
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多