0

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

Как 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> 

ответ

0

Я как-то понял это.

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

Хотя «Newtonsoft.Json» не имеет CopyLocal = истина явно задается в файле csproj, кажется, визуальная студия оценивает автоматически, когда CopyLocal = истина устанавливается или нет.

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

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

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

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

Смежные вопросы