2014-11-16 66 views
0

我有一个本质上是开发人员工具包的产品 - 一组用于特定用途的.NET程序集(仅编译)。产品安装还包括以源代码形式以Visual Studio项目形式分发的用法示例。这些示例中的一部分引用了额外的NuGet包(这些包不在产品本身中使用)。具体而言,它是Rx-Main软件包(适用于Microsoft Reactive Extensions),但也可以是其他软件。发布引用NuGet包的项目

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

1)我不确定它是否符合许可证条件以这种方式重新分发软件包。至少我期望在Visual Studio中打开项目时要求最终用户重新确认软件包许可条件,但这种情况并未发生。

2)包中的二进制文件不必要地包含在安装中,使其变大。我可以安全地假设用户有Internet连接并可以下载该软件包。因此,我宁愿只发布一个“参考”包。只有当用户真正需要这个例子时,他才会下载引用包。

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

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

回答

1

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

+0

哦,太好了,是的。看起来我需要“自动软件包恢复”选项。我没有发现的原因是我故意在VS2012中有我的例子,并在VS2012中做了测试。看起来,VS2012有一个早期版本的NuGet,它没有这个功能(或者没有完整的功能,当然可用的部分默认是关闭的)。在VS2013中,默认情况下都是启用的,根据您提供的MSDN链接,它应该完全符合我的期望。我接受的答案,虽然我还没有测试过...... – ZbynekZ

+0

@ZbynekZ我相信它应该足以更新NuGet扩展。即使在VS2010中,我也看到了包恢复功能。 – jariq

+0

你说得对,它取决于NuGet版本,而不是VS版本。更新VS2012中的NuGet使其工作。这揭示了我应该在原始问题中提到的一个“隐藏”要求:我希望它能够“开箱即用”安装。而且,在VS2012中情况并非如此。我知道更新NuGet扩展并启用必要的选项可以解决这个问题,但如果没有它,我会更加高兴。无论如何,我认为它已经解决了,因为在VS2013中它可以直接使用,并且VS2012正在被淘汰,我可以将它记录在VS2012中。 – ZbynekZ