Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild NuGet不会复制版本高于指定版本的依赖项_Msbuild_Visual Studio 2012_Nuget - Fatal编程技术网

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

Msbuild NuGet不会复制版本高于指定版本的依赖项,msbuild,visual-studio-2012,nuget,Msbuild,Visual Studio 2012,Nuget,我有一个Web项目(W),它引用了一个类库项目(C): C参考文献N1: W --> C C --> N1 N1是一个自定义NuGet包,它有两个依赖项(两者都是自定义NuGet包):N2eN3,分别针对2.1或更高版本和3.4或更高版本 N1 ---> N2 (>= 2.1) `--> N3 (>= 3.4) 当我将N1包添加到C时,N2有一个可用的2.2版本,所以NuGet得到了这个版本,而不是预期的2.1 问题从这里开始:当我构建W时,N2不

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

C参考文献N1

W --> C
C --> N1
N1是一个自定义NuGet包,它有两个依赖项(两者都是自定义NuGet包):N2eN3,分别针对2.1或更高版本和3.4或更高版本

N1 ---> N2 (>= 2.1)
   `--> N3 (>= 3.4)
当我将N1包添加到C时,N2有一个可用的2.2版本,所以NuGet得到了这个版本,而不是预期的2.1

问题从这里开始:当我构建W时,N2不会复制到W
bin
文件夹中。我在谷歌上搜索了一下,发现VisualStudio不会将非“第一类依赖项”的依赖项(即不是由C直接使用的依赖项)复制到W的输出文件夹中。我可以确认这一点,因为当我将下面的方法添加到C中的任何类中时,N2会被复制

private void ForceCopyOfN2()
{
var someObject=new N2.SomeClass();
}
此外,在没有上述黑客攻击的情况下,如果我将N2的版本降级到由N1包依赖项指定的相同版本(即从2.2到2.1),N2也会被复制


所以我猜这是NuGet的问题。有人经历过类似的事情吗?

我无法用VS 2012的目标4.5来重现这一点,以下是我尝试的
1.创建新的web应用程序项目
2.创建新类库
3.将web应用程序的引用添加到类库
4.课堂图书馆 PM>安装程序包windowsAzure.servicebus

正在尝试解析依赖项“Microsoft.WindowsAzure.ConfigurationManager”(≥ 1.7.0.0)'. 您正在从Microsoft下载Microsoft.WindowsAzure.ConfigurationManager,其许可协议位于。检查软件包中是否有其他依赖项,这些依赖项可能随他们自己的许可协议一起提供。您对软件包和依赖项的使用构成您对其许可协议的接受。如果您不接受许可协议,请从设备中删除相关组件。

已成功安装“Microsoft.WindowsAzure.ConfigurationManager 1.7.0.3”。 您正在从Microsoft下载WindowsAzure.ServiceBus,其许可协议位于。检查软件包中是否有其他依赖项,这些依赖项可能随他们自己的许可协议一起提供。您对软件包和依赖项的使用构成您对其许可协议的接受。如果您不接受许可协议,请从设备中删除相关组件。 已成功安装“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版本的ConfigurationManager
6.构建类库,然后构建webapplication解决方案,刷新解决方案资源管理器。对于我的解决方案,我看到classlibrary、servicebus和configurationmanager被放在bin文件夹中。(不知道为什么,但在添加引用后再次尝试构建类库后,我看到文件被删除)


这里有我遗漏的东西吗?

嗨,Alex,这可能不是NuGet,因为在类库项目中安装了包之后,它的工作就结束了。这些是什么包裹?谢谢Clay@ClayCompton,正如我所说的,这些是定制NuGet包,托管在定制NuGet服务器上。我很难相信NuGet只是安装了这个包,因为如果N2是N1所需的确切最低版本,那么N2会被复制到W的输出目录。还有谁在做这个复制?我怀疑这与msbuild如何解析依赖项有关。在为每个条件(N1v2.1)和(N1v2.2)启用详细生成输出的情况下重新编译,并比较生成输出结果。@JayWalker,在使用详细生成输出编译时肯定会发现一些问题。我得出的结论是:当C编译时,它试图找到N2 2.1,因为这是N1需要的版本。它找不到它,但N2 2.2是C的直接引用(因为NuGet依赖关系),因此在冲突后,它说“选择N2-2.2是因为它是主要的,而N2-2.1不是”。然而,当W编译时,它也尝试查找N2 2.1,但没有成功,但没有N2 2.2直接引用,因此它不会复制任何内容。我有点被困在这里。我按照您提到的步骤操作,Microsoft.WindowsAzure.ConfigurationManager和WindowsAzure.ServiceBus都没有复制到WebApplication
bin
文件夹。您的NuGet输出表明您已将包安装到WebApplication而不是ClassLibrary(“已成功将“Microsoft.WindowsAzure.ConfigurationManager 1.8.0.0”添加到WebApplication15”)。你能再试一次让我知道吗?是的,你是对的,我错过了从软件包管理控制台选择要安装的项目。我想这和我的想法是一样的。您的目标是4.5吗?我已将我的项目上载到此处似乎有效的位置(我必须先清理bin文件夹,然后构建类库,然后再构建webapplication。请检查磁盘或刷新解决方案资源管理器,以查看servicebus和configuration manager是否已放入webapplication bin文件夹)。你能分享你的项目吗?我可以试试。