MSBuild не может найти пакет для проекта .NET Standard в решении с другими проектами .NET Framework - PullRequest
0 голосов
/ 01 июня 2018

У меня есть решение Visual Studio с:

  • 2 .NET Standard 2.0 проекты (.csproj)
    • proj A (библиотека классов): proj refs -> proj B, нет пакетов Nuget
    • proj B (библиотека классов): нет ссылок на проекты, нет пакетов Nuget
  • 2 .NET Framework 4.7.2 проекты (.csproj)
    • proj C (библиотека классов): proj refs -> proj B, несколько пакетов Nuget
    • proj D (тестовый проект): proj refs -> proj C, proj B & proj A, несколько пакетов Nuget

Это решение прекрасно работает на моей локальной машине с VS Community 2017 15.7.3 Это решение также хорошо работает на моей сборочной машине, котораяиспользует MSBuild от той же VS той же версии.

Проблема

Проблема возникает, когда я добавляю пакет Nuget (в данном случае Newtonsoft)до proj A.Решение отлично работает на моей локальной машине, но не работает при использовании MSBuild.Кроме того, если я загружаю решение на свою сборочную машину, используя установленную там VS, оно прекрасно собирается.

Возникает ошибка:

error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?)

Я думаю, что я сузил проблему до проблемы, где .NET Standard & .NET Framework projects don 'Нельзя играть вместе с Nuget, когда они находятся в одном .sln, потому что, если я полностью удаляю proj C & proj D, сборка будет успешной на моей машине сборки.Я также могу подтвердить, что пакет Newtonsoft находится в моей папке C:/User/.nuget/packages, но не находится в папке ./packages каталога решений (что я вполне уверен, если это произойдет, поскольку это проект .NET Standard?).

CI .yml Файл

nuget.exe restore $SOLUTION_FILE
MSBuild.exe '/p:Configuration=release' $SOLUTION_FILE

Примечания

Я много читал, пытаясьчтобы найти проблемы, похожие на это, но ближе всего я получаю проблемы, которые очень похожи на этот .Эта проблема похожа, но использует сам проект .NET Standard в качестве пакета Nuget, где я пытаюсь получить пакеты Nuget в сам проект .NET Standard.Может быть, мне нужно извлечь все мои .NET Standard проекты в пакет Nuget вместо того, чтобы использовать их в одном решении?

1 Ответ

0 голосов
/ 08 июня 2018

Как указал Лео Лиу , использование msbuild /t:restore "YourSolutionFile.sln" было уловкой, хотя я должен был сделать это так же, как и запустить nuget.exe restore "YourSolutionFile.sln", что я считаю странным ...

...