Как пакет nuget определяет copylocal

У меня есть проблемы, с которыми я сталкиваюсь, когда определенный установленный пакет nuget, добавленный через VS2012, имеет значение copylocal, установленное в значение true, в то время как другим не задано никакого значения.

Как Nuget знает, когда добавлять copylocal, а не в?

Есть ли какие-то настройки, которые я пропускаю в файле nupkg, который мне не хватает?

Я взглянул на исходный код для nuget (кратко), и если существует значение copylocal, тогда оно должно быть установлено в true.

например

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>

1 ответ

Я вроде понял это.

Ответ частично лежит здесь: http://msdn.microsoft.com/en-us/library/vslangproj.reference.copylocal

Хотя "Newtonsoft.Json" не имеет явно установленного copylocal=true в файле csproj, кажется, что Visual Studio оценивает автоматически, когда установлено copylocal=true или нет.

Кажется, что nuget полагается на интеграцию DTE, чтобы помочь ему определить значение для copylocal.

Я проверил это, запустив msbuild из VS2012, удалив System.Web.MVC из GAC, и он был скопирован в каталог bin.

Я предполагаю, что это становится проблемой только тогда, когда кто-то хочет открыть скомпилированный веб-сайт, в котором нет dll, например System.Web.MVC.

VS в этом случае не знает, как это должно выглядеть в GAC.

Другие вопросы по тегам