我遇到的问题是通过VS2012添加的某些nuget安装包将copylocal值设置为true,而其他人没有设置任何值。
nuget如何知道何时添加copylocal而不是?
我缺少的nupkg文件中是否缺少某些设置?
我查看了nuget的源代码(简要说明),并且它存在copylocal值,然后应该设置为true。
e.g。
Install-Package System.Web.Mvc
解析为
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
<HintPath>..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
然而
Install-Package Newtonsoft.Json
解析为
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
答案 0 :(得分:0)
我有点想通了。
答案部分在于: http://msdn.microsoft.com/en-us/library/vslangproj.reference.copylocal
虽然“Newtonsoft.Json”没有在csproj文件中明确设置copylocal = true,但是当设置了copylocal = true时,visual studio似乎会自动评估。
似乎nuget依赖于DTE集成来帮助它确定copylocal的价值。
我通过从VS2012运行msbuild测试了这一点,从GAC中删除System.Web.MVC并将其复制到bin目录。
我想这只会成为一个问题,当人们想要打开一个已编译的网站时,垃圾箱中不存在dll,例如System.Web.MVC。
VS在这种情况下不知道它应该在GAC中查看。