Опубликовать не преобразование web.config?
Я сделал web.config
( полный файл, он не показывает ошибки XML)
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
...
<location path="." inheritInChildApplications="false">
<connectionStrings>
<add name="ElmahLog" connectionString="data source=~/App_Data/Error.db" />
<add name="database" connectionString="w" providerName="System.Data.EntityClient"/>
</connectionStrings>
</location>
...
с файлом преобразования (web.Staging.config
)
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="database"
connectionString="c"
providerName="System.Data.EntityClient"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<customErrors defaultRedirect="error.aspx"
mode="RemoteOnly" xdt:Transform="Replace">
</customErrors>
</system.web>
</configuration>
Я публикую в режиме Staging
(щелкните правой кнопкой мыши веб-сайт > Опубликовать > Метод: Файловая система...)
------ Build started: Project: Drawing, Configuration: Staging Any CPU ------
Drawing -> D:\Project\bin\Staging\Drawing.dll
------ Build started: Project: MySystem, Configuration: Staging Any CPU ------
MySystem -> D:\Project\bin\Staging\MySystem.dll
...
Но когда я смотрю на web.config
в выходной папке, он не изменяется.
В журнале сборки я нашел следующее:
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
Transformed web.config using Web.Staging.config into obj\Staging\TransformWebConfig\transformed\web.config.
В чем может быть проблема? Правильно ли я делаю это?
Ответы
Ответ 1
Я узнал две вещи:
- Вы не можете установить пространство имен в теге
<configuration>
(например: для <location path="." inheritInChildApplications="false">
)
- Вы должны следить за правильной иерархией в файле преобразования.
Как
<configuration>
<location>
<connectionStrings>
Вместо
<configuration>
<connectionStrings>
Ответ 2
Отвечая поздно, но, возможно, я могу спасти кого-то от головной боли. В Visual Studio 2013 есть два места для выбора конфигурации для вашей сборки и развертывания. Диспетчер конфигурации, а затем снова с Publish Web, где третий шаг в Мастере под названием "Настройки" позволяет вам выбрать Config, который вы хотите использовать. Если вы не выбрали новую конфигурацию, она будет использовать преобразование для выбранной конфигурации вместо вашей.
Ответ 3
Убедитесь, что в свойствах файла Web.Config Build Action
установлено значение Content
.
Если для действия сборки установлено значение None
, оно не будет преобразовано, даже если оно будет скопировано в выходной каталог.
Ответ 4
Не забудьте скопировать все остальные атрибуты "конфигурации" из оригинального "web.config", так как кажется, что VS2012 не делает это автоматически и, конечно, совпадения не будет...
Ответ 5
Отвечая позже, но это может помочь кому-то.
Я понял, что если у вас есть два веб-сайта в одном решении, когда вы пытаетесь опубликовать одно из них, преобразование может не работать, если у вас есть только одна конфигурация для обоих проектов.
Один из моих сайтов всегда трансформировался, а другой иногда был, а иногда и не был.
Например, у меня была конфигурация "Авто" в решении и была web.Auto.config для обоих веб-сайтов.
Я решил, что, создав новую конфигурацию с другим именем - "AutoAdmin" - создав также свой файл web.AutoAdmin.config для второго проекта, а когда я снова опубликовал его, окончательно произошла трансформация.