Я боролся с Nuget все утро, пытаясь получить решение, основанное на пользовательском интерфейсе И из командной строки. Вот последняя проблема, с которой я не справился:
- Я запускаю восстановление nuget в файле решения. Это работает, все ссылочные пакеты восстанавливаются - я вижу файлы в папке / packages в папке решения.
- Я строю с помощью командной строки devenv - мне нужно, потому что это решение содержит типы проектов, которые msbuild не поддерживает.
- Первый проект, который ссылается на пакет nuget, не может быть скомпилирован с
...cs(3,7,3,17): error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?)
- Проект строит (и перестраивает, и перестраивает с очищенной папкой пакета) просто нормально в пользовательском интерфейсе, но сборка командной строки не видит восстановленные пакеты.
- Сборка, которая терпит неудачу, находится в папке CLEAN на том же компьютере, где я делаю сборку пользовательского интерфейса, так что она получается из управление исходным кодом, восстановление nuget, сборка devenv.
Вещи, которые я пробовал
- Поиск путей неверных подсказок в файле проекта (см. это в другом вопросе / ответе) , Эти ссылки вообще не отображаются в файле проекта - попытка добавить их приводит к ошибке, говорящей, что ссылка не может быть добавлена, потому что она уже добавлена автоматически системой сборки.
- Проверка того, что файлы существуют после восстановления.
- Выполнение тех же шагов из командной строки в той же папке, где создается пользовательский интерфейс. Это отлично работает.
Чего мне не хватает? это не должно быть так сложно ..
ОБНОВЛЕНИЕ: решение состоит из 14 проектов: 9 C# библиотек классов, 2 c# приложений, 1 проект служб отчетов и 2 проекта установщика WiX. Все C# проекты предназначены для Net472, а не для ядра. Ключевая часть структуры решения выглядит следующим образом:
- Проект A ссылки
- Newtonsoft. Json через nuget
- Проект B ссылки
- Проект A
- Newtonsoft. Json через nuget
- Другие пакеты через nuget
Во время сборки, Проект B не может быть скомпилирован из-за отсутствия ссылки на Newtonsoft. Json. Проект A и все другие пакеты nuget поставляются компилятору в качестве ссылок. Опять же, все пакеты nuget фактически восстановлены - проект A находит Newtonsoft. Json, проект B - нет.
В подробном выводе журнала msbuild это единственное упоминание о Newtonsoft. Json в сборка проекта 10 (проект B выше):
10> Dependency "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed".
10> Resolved file path is "...ProjectA\bin\Release\Newtonsoft.Json.dll".
10> Reference found at search path location "...ProjectA\bin\Release".
10> For SearchPath "...ProjectA\bin\Release".
10> Considered "...ProjectA\bin\Release\Newtonsoft.Json.winmd", but it didn't exist.
10> Required by "...ProjectA\bin\Release\ProjectA.dll".
10> Required by "C:\...ProjectA2\bin\Release\ProjectA2.dll".
10> Found related file "...ProjectA\bin\Release\Newtonsoft.Json.xml".
10> The ImageRuntimeVersion for this reference is "v4.0.30319".
(имена папок и проектов скрыты)