Как вы можете автоматизировать обновление ссылки Nuget до последней версии в проекте ASP.NET Core?

Я пытаюсь автоматизировать создание приложения ASP.NET Core, которое имеет два типа зависимостей от пакетов Nuget, являющихся частью одного проекта:

  1. Прямая зависимость от пакета Nuget также активно развивается в рамках усилий
  2. Ссылка на "классические" проекты сборки.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.

  1. Последняя версия Lnl.Saas.Diagnostics непосредственно в проекте API
  2. Два других 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.

0 ответов

Другие вопросы по тегам