Добавление атрибутов XDT в Release.config с помощью XML Document Transform после установки пакета NuGet - PullRequest
0 голосов
/ 04 октября 2018

Я публикую пакет NuGet для внутреннего использования.Этот пакет обрабатывает ошибки в веб-приложениях ASP.NET MVC с помощью ErrorController, упакованного в сборку, на которую ссылается установка пакета.

Поэтому при установке этого пакета я хочу, чтобы следующее содержимое заканчивалось на Web.Release.config уже присутствует в проекте, где будет установлен пакет:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer xdt:Transform="InsertIfMissing">
    <httpErrors errorMode="Custom" existingResponse="Replace" xdt:Transform="InsertIfMissing" >
      <remove statusCode="404" xdt:Transform="InsertIfMissing" xdt:Locator="Match(statusCode)" />
      <error statusCode="404" path="/error/404" responseMode="ExecuteURL" xdt:Transform="InsertIfMissing" xdt:Locator="Match(statusCode)" />

      <remove statusCode="500" xdt:Transform="InsertIfMissing" xdt:Locator="Match(statusCode)" />
      <error statusCode="500" path="/error/500" responseMode="ExecuteURL" xdt:Transform="InsertIfMissing" xdt:Locator="Match(statusCode)" />
    </httpErrors>
  </system.webServer>
</configuration>

То есть , включая атрибуты xdt.Я только хочу, чтобы это было в конфигурации релиза, которая преобразуется при сборке, а не в обычную Web.config, поэтому при разработке приложения вы получаете обычные ошибки 404 и 500, которые помогают в разработке и отладке.(Невозможно включить этот элемент, если для errorMode установлено значение «Подробно» или «Подробно локально» в Web.config и , например, получить синтаксические ошибки из представлений Razor, напечатанных на экране).

Итак, у меня есть вышеуказанное содержимое в файле с именем content\Web.Release.config.install.xdt в моем пакете NuGet для преобразования файла конфигурации (мы используем Packages.config, а не <PackageReference />), а при установке пакета *Элемент 1023 * вставляется в файл, но ... без атрибутов xdt (конечно, потому что они применяются при установке, что само по себе является преобразованием):

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404"/>
    <error statusCode="404" path="/error/404" responseMode="ExecuteURL"/>
    <remove statusCode="500"/>
    <error statusCode="500" path="/error/500" responseMode="ExecuteURL"/>
  </httpErrors>
</system.webServer>

При публикации этого приложения этот элемент исключается из преобразованной конфигурации, поскольку атрибуты xdt отсутствуют.

Например, вы не можете использовать <system.webServer xdt:Transform="InsertIfMissing SetAttributes(xdt:Transform)"> (ожидается, что элемент <system.webServer> отсутствует), поскольку это недопустимое значение для атрибута Transform.

Вы такженельзя использовать псевдоним пространства имен (xmlns:xdt2="http://schemas.microsoft.com/XML-Document-Transform") и применять его в дополнение к существующим атрибутам xdt, так как это приведет к дублированию атрибутов из того же пространства имен.

Так что можно сделать, чтобы вставить XML, показанный вверху, в Web.Release.config?

...