Как вы можете автоматизировать обновление ссылки Nuget до последней версии в проекте ASP.NET Core?
Я пытаюсь автоматизировать создание приложения ASP.NET Core, которое имеет два типа зависимостей от пакетов Nuget, являющихся частью одного проекта:
- Прямая зависимость от пакета Nuget также активно развивается в рамках усилий
- Ссылка на "классические" проекты сборки.NET в том же решении, где эти проекты зависят от пакетов Nuget, которые мы также разрабатываем
Я хочу, чтобы сборка этого решения получала последние версии наших пакетов Nuget, а затем "делала правильные вещи".
Давайте начнем с № 1 выше:
С помощью dnu install (устарела) я могу эффективно обновиться до последней версии пакета Nuget; однако это только в том случае, если я запускаю dnu install в том же каталоге, что и мой xproj. Зачем? потому что есть три позиционных (но AFAICT безымянных) аргумента: идентификатор пакета, версия, местоположение проекта - поэтому, если я хочу указать местоположение проекта, я должен указать версию, но что добавить, если я хочу последнюю версию? Пробовал * но это не сработало.
В идеале я бы хотел использовать клиент Coreclr dotnet в любом случае, но у него - умышленно - нет возможности установки.
Теперь вариант № 2 Мои "классические" проекты сборки имеют этап предварительной сборки с использованием обновления nuget, которое извлекает последние нюансы для нашего проекта и строит соответствующим образом (что аналогично моему случаю № 1).
ОДНАКО, похоже, что ссылки на эти проекты в моем приложении ASP.NET Core не обновляются, хотя проект ASP.NET перестраивается. В обозревателе решений версии зависимых нативов остаются в той версии, в которой они были, когда я добавлял их вручную в качестве ссылок. Единственный способ, который я нашел, чтобы исправить - даже когда просто работал в Visual Studio - это удалить ссылки, а затем снова добавить их (как будто механизм "обтекания" не включается автоматически).
Все это заставляет меня думать, что на самом деле невозможно полностью автоматизировать эту сборку - надеясь, что я ошибаюсь:)
Пересмотрено, чтобы включить более подробную информацию ниже
Вот структура проекта, показанная в Visual Studio, с точки зрения правильной сборки.
Вот глобальный.json:
{
"projects": [
"src",
"test",
"wrap"
],
"sdk": {
"version": "1.0.0-rc1-update1"
}
}
А вот полный файл project.json для проекта API:
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Lnl.Saas.Diagnostics": "1.0.0-*",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
"Microsoft.Extensions.Logging.TraceSource": "1.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},
"frameworks": {
"dnx452": {
"dependencies": {
"Account.Model": "1.0.0-*",
"Account.Service": "1.0.0-*"
}
}
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
Теперь я перестраиваю проекты (не показаны), которые создают пакеты Nuget, упомянутые в приведенном выше решении.
Тогда я хотел бы иметь возможность перестроить решение для учетной записи, описанное выше, чтобы добавить обновленные Nugets.
- Последняя версия Lnl.Saas.Diagnostics непосредственно в проекте API
- Два других Nuget в проекте Service (это работает через установку Nuget после сборки), а затем обновите ссылку на Service в проекте API, чтобы она ссылалась на NEW nugets.
Обратите внимание, что ссылка на диагностический Nuget не изменилась (как и в Service, но я забыл развернуть ее на первом снимке экрана)
Если я смотрю в пользовательском интерфейсе диспетчера пакетов Nuget, он знает, что есть обновления, и если я использую пользовательский интерфейс, они применяются.
Если я запускаю dnu restore в консоли диспетчера пакетов, он перечисляет новые пакеты, но (re?) Устанавливает предыдущие - которые явно названы в project.lock.json.
От попыток собрать воедино документацию, у меня сложилось впечатление, что dnu restore делает "правильную" вещь здесь, и мне нужно было использовать dnu install, которая работает, если я запускаю ее в том же каталоге, что и файл project.json (но если я попробуйте запустить из другого каталога, где лежат мои сценарии автоматизации, я не могу / не знаю, что добавить в аргумент версии (2-й), который теперь требуется, потому что я предоставляю аргумент расположения проекта (3-й),
Документация на http://docs.asp.net/en/latest/dnx катастрофически отсутствует, и когда я перешел по некоторым ссылкам, я попал в проект http://dotnet.github.io/ котором есть лучшая документация (но нет очевидного упоминания о том, что он относится к RC2).
Наконец, и, возможно, это дает некоторые дополнительные подсказки, что при сборке я получаю предупреждения (которые, по-видимому, не вызывают проблем во время выполнения), например:
Предупреждение MSB3274 Не удалось разрешить первичную ссылку "C:...\Account\Service\bin\Debug\Account.Service.dll", поскольку она построена на основе платформы.NETFramework,Version=v4.5.2. Это более высокая версия, чем целевая на данный момент платформа ".NETFramework,Version=v4.5.1".
но я не знаю, как решить, так как я не знаю, где и как я нацеливаюсь на структуру 4.5.1 с проектом API.