Я публикую пакет 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?