Nuget XDT Transform не работает для конфигурационных файлов - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть .NetStandard библиотека.Я собираюсь использовать его в приложениях .NetFramework и .NetCoreApp.

Для работы с файлами конфигурации используется пакет System.Configuration.ConfigurationManager.Мне нужно преобразовать эти файлы конфигурации во время установки библиотеки.

Я нашел 2 способа:

  1. tools папка в пакете nuget с файлом install.ps1 в ней
  2. content папка с app.config.install.xdt файлом в ней

Не из них не работает - nuget не запускается install.ps1, nuget не преобразуется App.config.

Существует код из csproj:

<ItemGroup>
  <Content Include="Content\app.config.install.xdt">
    <PackagePath>content</PackagePath>
  </Content>
</ItemGroup>

Пакет Nuget содержит этот файл ... Поэтому я понятия не имею, почему он не работает.

Связана ли эта проблемадо .NetStandard?Что я делаю не так?

1 Ответ

0 голосов
/ 07 декабря 2018

Выполнение сценариев ps1 и XDT-преобразований - это функции, которые работают только с package.config, , но не PackageReference .Проекты .NET Core (и я думаю .NET Standard) работают только с проектами в стиле SDK, а проекты в стиле SDK поддерживают только PackageReference.Packages.config работает только с проектами «старого стиля», которые также могут использовать PackageReference.

Способ, которым библиотеки Microsoft ASP.NET Core справляются с этим различием, заключается в том, что они больше не читают настройки непосредственно из web.config.Вместо этого программа должна зарегистрировать функции обратного вызова, которые изменят существующий объект опций в памяти.Например,

services.AddMyService(options =>
    {
        options.setting = newValue;
    });

Это имеет некоторые преимущества для ваших пользователей.

  1. Они больше не ограничиваются хранением значения конфигурации в том месте, которое требовал автор библиотеки.Они могут выбрать загрузку конфигурации из базы данных, службы конфигурации, XML-файла, JSON-файла или просто жестко запрограммировать ее в приложении.Но это позволяет каждому разработчику выбирать, что лучше для их собственной системы.
  2. Если пользователь переопределяет параметр, который пакет помещает в файл конфигурации, и каждое обновление пакета переопределяет предпочтения пользователя, пользователь раздражается, чтопакет не учитывает свой выбор изменить значение по умолчанию.
  3. Если пользователь не хочет переопределять параметр, который пакет поместил в файл конфигурации, и автор пакета не хочет перезаписыватьКонфигурационный файл при каждом обновлении, тогда автору пакета очень сложно изменить значение по умолчанию.

Новая модель ASP.NET Core лучше для всех, потому что автор пакета создает объект параметров и предварительно заполняетэто со значениями по умолчанию, а затем вызвать метод делегата пользователя, позволяющий им изменить настройки, которые им нужны.Если автор пакета хочет изменить значение по умолчанию, он делает это в своем собственном коде, публикует новый пакет, и пользователи, которые не изменяют значение, получают новое значение по умолчанию, а пользователи, которые явно устанавливают значение в своем коде, продолжают использоватьзначение, которое они хотят, из любого хранилища конфигурации, которое они хотят.

Итак, ответ TL: DR заключается в том, что вы не можете делать то, что просили в проектах PackageReference, но я надеюсь, что мой более длинный ответ дал вамидеи о том, как вы можете изменить дизайн своей библиотеки, что улучшит работу как автора пакета, так и пользователя пакета.

...