предупреждение: все проекты, ссылающиеся на MyProject.csproj, должны установить пакет nuget Microsoft.Bcl.Build

90

У меня есть приложение ASP.NET MVC 4, разработанное в VS 2012. Приложение состоит из основного проекта (MyProject), проекта модульного тестирования (MyProject.Tests), проекта развертывания Azure (MyProject.Azure) и нескольких универсальные библиотечные проекты.

Когда я щелкаю правой кнопкой мыши решение или основной проект и выбираю «Управление пакетами NuGet», я вижу кучу обновлений Microsoft, которые, по-видимому, стали доступны в последний месяц или около того. Если я нажимаю кнопку «Обновить все», то обновления, по-видимому, устанавливаются без каких-либо очевидных проблем, но когда я создаю решение, я получаю это сообщение об ошибке ДВАЖДЫ:

warning : All projects referencing MyProject.csproj must install nuget package Microsoft.Bcl.Build

Итак, у меня есть два проекта, которые ссылаются на MyProject: MyProject.Tests и MyProject.Azure. Я могу щелкнуть правой кнопкой мыши MyProject.Tests, выбрать ManageNuGet Packages и добавить Microsoft.Bcl.Build. Это избавляет от одного из двух предупреждений. Но VS не дает мне возможности управлять пакетами NuGet для проекта MyProject.Azure .

Как добавить пакет Microsoft.Bcl.Build в проект развертывания Azure?

РЕДАКТИРОВАТЬ:

Благодаря пользовательской зыби , теперь я знаю , что проблема Microsoft Connect для этой проблемы была открыта здесь .

Bob.at.Indigo.Health
источник
2
Спасибо за ссылку на проблему с подключением, это досадная проблема.
Пол Кейстер
1
Связанная с предупреждением при сборке проекта развертывания, также существует ошибка, которая вызывает ложное предупреждение при публикации проекта. Об ошибке, связанной с публикацией, также сообщается в Connect . Я не знаю обходного пути.
Эдвард Брей
3
Та же проблема возникает у меня с проектами WiX, которые имеют ссылки на другие проекты (с целью сбора результатов проекта, также известного как «тепло»). Для проекта установщика WiX нет никакого смысла устанавливать пакеты NuGet! Ах !!
Jaans
2
Ссылка на проблему с подключением теперь возвращает 404 connect.microsoft.com/VisualStudio/feedback/details/789839/…
Райан Гейтс,

Ответы:

54

Если вы дважды щелкните предупреждение, вы получите инструкции по его отключению.

Можно безопасно отключить ссылки на проекты из проектов, которые еще не поддерживают Nuget.

См. Ниже выделенную жирным шрифтом часть, скопированную из Microsoft.Bcl.Build.targets.

BclBuildValidateNugetPackageReferences

Эту цель можно отключить для ссылки на проект, установив для ссылки SkipValidatePackageReferences = true :

<ProjectReference Include="..\pcl\pcl.csproj">
  <Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
  <Name>pcl</Name>
  <Properties>SkipValidatePackageReferences=true</Properties>
</ProjectReference>
TheESJ
источник
4
Артур, можешь попробовать установить значение метаданных AdditionalPropertes вместо свойств?
TheESJ
5
@TheESJ У меня была эта проблема с проектом WiX, и похоже, что установка AdditionalProperties вместо свойств работает. Хотя мне интересно знать, почему
lc.
3
Это работает только для создания решения, но когда вы фактически используете «Выполнить» с проектом Azure в качестве запускаемого проекта, вы снова увидите предупреждения.
ранний
2
Не работайте даже над сборкой. VS 2015 Community Edition.
Артём
2
Не работал в VS2015 Professional. У меня такая же проблема с добавлением этой строки.
aclalex
63

Ответ, предоставленный TheESJ, правильный, однако формулировка мне была непонятна. Поскольку я не могу комментировать ответ, я предоставлю здесь более подробную информацию. В частности, у меня возникла эта проблема с проектом Azure, и для устранения предупреждения потребовалось следующее обходное решение:

Если дважды щелкнуть предупреждение в VisualStudio, вы попадете в целевой объект BclBuildValidateNugetPackageReferences в файле Microsoft.BclBuild.targets. Над фактическим целевым элементом вы должны найти большой блок комментариев, в котором говорится об отключении проверки ссылок на проект. Поскольку проекты Azure не могут иметь ссылок на библиотеки, эти проекты Azure не могут удовлетворить требования этой конкретной цели сборки.

Решение? Отключите проверку ссылок из проекта Azure, поскольку фактически добавить ссылку на пакет nuget невозможно.

ПРИМЕР

Итак, предположим, что у нас есть два проекта: MyAzureProject.ccproj, который ссылается на MyProject.csproj. . Следуй этим шагам:

  1. Щелкните правой кнопкой мыши «MyAzureProject» в обозревателе решений и выберите «Изменить файл проекта».
  2. Найдите ссылку на проект «MyProject». Это должно выглядеть примерно так:

    <ProjectReference Include="..\MyProject\MyProject.csproj">
      <Name>MyProject</Name>
      <Project>{1d99490e-d140-4897-9890-238e673a5864}</Project>
      ...
    </ProjectReference>
    
  3. Добавьте следующий элемент внутрь элемента ProjectReference:

      <Properties>SkipValidatePackageReferences=true</Properties>
    
  4. Ссылка на ваш проект теперь должна выглядеть так:

    <ProjectReference Include="..\MyProject\MyProject.csproj">
      <Name>MyProject</Name>
      <Project>{1d99490e-d140-4897-9890-238e673a5864}</Project>
      ...
      <Properties>SkipValidatePackageReferences=true</Properties>
    </ProjectReference>
    
  5. Щелкните правой кнопкой мыши «MyAzureProject» в обозревателе решений и выберите «Перезагрузить проект».

Теперь у вас должна быть возможность перестроить, и ошибка должна исчезнуть.

АггиЭрик
источник
17
В моей версии VS я должен сначала щелкнуть правой кнопкой мыши и «Выгрузить проект», прежде чем я смогу щелкнуть правой кнопкой мыши, чтобы отредактировать файл проекта
pius
2
Вы имели в виду, MyAzureProject.ccprojа не MyAzureProject.csproj?
Эдвард Брей
Это работает, только если я добавлю <Properties> SkipValidatePackageReferences = true </Properties> в файл * .csproj, на который ссылается проект. Простое редактирование * .ccproj не работает.
Алексей
1
@pius Это небольшая функция, но есть пункт контекстного меню «Редактировать файл проекта» в разделе «Команды питания» в Productivity Power Tools , доступный для нескольких редакций VS. Он выгружает проект и открывает для вас файл проекта одним щелчком мыши.
Джефф
16

Я столкнулся с той же проблемой и пытался обновить Microsoft.Bcl.Build.targets; что не помогло.

После некоторого расследования было обнаружено, что .csproj-файл проекта службы Azure необходимо изменить для включения <Properties>SkipValidatePackageReferences=true</Properties>.

Это не было очевидно из ответа @TheESJ, поэтому было решено опубликовать отдельный ответ. Спасибо @TheESJ.

Сантош
источник
2

Я сталкивался с этой проблемой несколько раз, и метод Properties действительно работает, но при работе с проектом Wix мне пришлось вместо этого сделать следующее:

<AdditionalProperties>SkipValidatePackageReferences=true</AdditionalProperties>

Когда я использовал узел Properties Xml, я получил новую ошибку:

Свойство OutputPath не установлено для проекта MyInstallerProject.csproj. Убедитесь, что вы указали допустимую комбинацию конфигурации и платформы для этого проекта. Конфигурация = «Отладка» Платформа = «x86». Эта ошибка также может появиться, если какой-либо другой проект пытается следовать межпроектной ссылке на этот проект, этот проект был выгружен или не включен в решение, а ссылающийся проект не строится с использованием того же или эквивалентного Конфигурация или платформа.

оз
источник
0

Не сумев решить проблемы с помощью любого из приведенных выше ответов, я просто выполнил инструкции, содержащиеся в файле Microsoft.Bcl.Build.targets (отображается после двойного щелчка по ошибке в окне вывода сборки). Я выгрузил свой проект (ссылаясь на пакеты Azure), обнаружив ошибку. Отредактировал файл проекта и вставил следующее ...

<PropertyGroup>
      <SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>

... в верхней части файла проекта перед первой PropertyGroup.

Мик
источник