NuGet不会复制版本高于指定版本的依赖项

时间:2012-11-27 22:05:15

标签: msbuild visual-studio-2012 nuget

我有一个Web项目( W ),它引用了一个类库项目( C ):

W --> C

C 引用 N1

C --> N1

N1 是一个自定义NuGet包,它有两个依赖项(两者都是自定义NuGet包): N2 e N3 ,目标版本为2.1或更高,3.4或更高。

N1 ---> N2 (>= 2.1)
   `--> N3 (>= 3.4)

当我将 N1 包添加到 C 时, N2 有2.2版本可用,因此NuGet得到了那个,而不是2.1,正如预期的那样。

问题从这里开始:当我构建 W 时, N2 不会复制到 W bin文件夹。我google了一下,发现Visual Studio不会复制不是“第一类依赖”的依赖关系,即 C 没有直接使用的依赖关系, W 的输出文件夹。我可以确认一下,因为当我将以下方法添加到 C 中的任何类时, N2 会被复制。

private void ForceCopyOfN2()
{
    var someObject = new N2.SomeClass();
}

此外,如果没有上述黑客攻击,如果我将 N2 的版本降级为 N1 包依赖项指定的版本(即从2.2到2.1), N2 也会被复制。

所以我猜这是NuGet的一个问题。有没有人经历过这样的事情?

1 个答案:

答案 0 :(得分:-1)

我无法用VS 2012定位4.5来重现这个,这是我尝试过的 1.创建新的Web应用程序项目
2.创建新的类库 3.将Web应用程序的引用添加到类库中 4.在课堂图书馆 PM>安装包windowsAzure.servicebus

试图解决依赖'Microsoft.WindowsAzure.ConfigurationManager(≥1.7.0.0)'。 您正在从Microsoft下载Microsoft.WindowsAzure.ConfigurationManager,该许可协议位于http://go.microsoft.com/fwlink/?LinkID=235167。检查软件包是否有其他依赖关系,这可能与他们自己的许可协议一起提供。您对软件包和依赖项的使用即表示您接受其许可协议。如果您不接受许可协议,请从您的设备中删除相关组件。

成功安装了“Microsoft.WindowsAzure.ConfigurationManager 1.7.0.3”。 您正在从Microsoft下载WindowsAzure.ServiceBus,该许可协议位于http://go.microsoft.com/fwlink/?LinkId=218949。检查软件包是否有其他依赖关系,这可能与他们自己的许可协议一起提供。您对软件包和依赖项的使用即表示您接受其许可协议。如果您不接受许可协议,请从设备中删除相关组件。 已成功安装'WindowsAzure.ServiceBus 1.8.0.0'。

成功将“Microsoft.WindowsAzure.ConfigurationManager 1.7.0.3”添加到ClassLibrary1 成功将“WindowsAzure.ServiceBus 1.8.0.0”添加到ClassLibrary1。
5.服务总线依赖于> = 1.7的配置,并且安装了1.8版本的配置管理
6.构建classlibrary,然后构建webapplication解决方案,刷新解决方案资源管理器。对于我的解决方案,我看到classlibrary,servicebus和configurationmanager被放在bin文件夹中。 (不知道为什么但是我在添加引用后再次尝试构建classlibrary后看到文件丢失了)

我在这里缺少什么?