11

Я сделал web.config (full file, он не показывает ошибок XML)Опубликовать не преобразование web.config?

<?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. 

Что может быть проблема? Правильно ли я это делаю?

+0

Когда вы публикуете это здание для 'staging' или' release'? – Jimmy

+0

@Jimmy как журнал сборки, он компилируется в 'Staging'. Существует файл преобразования для 'Release', но он также не работает. – BrunoLM

+0

Вы видите сообщение о том, что оно выполняет преобразование? Как и мой, мы говорим: «Преобразованный Web.config с использованием Web.Beta.config в obj \ Beta \ TransformWebConfig \ transform \ Web.config." – CodingGorilla

ответ

16

я узнал две вещи:

  • Вы не можете установить пространство имен на <configuration> тега (например: для <location path="." inheritInChildApplications="false">)
  • Вы должны следить за правильной иерархии в файл преобразования.

Как

<configuration> 
    <location> 
    <connectionStrings> 

Вместо

<configuration> 
    <connectionStrings> 
+0

Что касается xmlns: на самом деле вы можете использовать его, но тогда вы также должны добавить его в тег корня преобразования. Без xmlns он работает, но VS не распознает атрибут inheritInChildApplications. – amartynov

0

Не забудьте скопировать все другие атрибуты "конфигурации" из оригинального "web.config", как это кажется, что VS2012 не делает это автоматически и, конечно, не будет соответствовать ...

+3

Это неправда. Вы можете указать только атрибуты, которые меняются, и дать указание преобразованию только обновлять атрибуты (не заменять элемент): '' –

14

Ответя поздно, но, возможно, я могу спасти кого-то головную боль. В Visual Studio 2013 есть два места для выбора конфигурации для вашей сборки и развертывания. Диспетчер конфигурации, а затем снова с Publish Web, где третий шаг в Мастере под названием «Настройки» позволяет вам выбрать Config, который вы хотите использовать. Если вы не выбрали новую конфигурацию, она будет использовать преобразование для выбранной конфигурации вместо вашей.

+3

Вы действительно спасли меня Головная боль. – izb

+1

Это реальный ответ. –

0

Ответ на поздно, но это может помочь кому-то.

Я понял, что если у вас есть два веб-сайта в одном решении, при попытке опубликовать одно из них преобразование может не работать, если у вас есть только одна конфигурация для обоих проектов.

Один из моих сайтов всегда трансформировался, а другой иногда был, а иногда и нет.

Например, у меня была конфигурация «Авто» в решении, и у вас был web.Auto.config для обоих веб-сайтов.

Я решил, что создав новую конфигурацию с другим именем - «AutoAdmin» - создав также свой файл web.AutoAdmin.config для второго проекта, и когда я снова опубликую его, окончательно произошла трансформация.

2

Убедитесь, что в свойствах Интернета.Файл конфигурации Build Action установлен в Content.

Если действие сборки установлено в None, оно не будет преобразовано, даже если оно копируется в выходной каталог.

Смежные вопросы