2013-07-12 2 views
3

У меня есть connectionString в Web.Debug.config, а еще один, другой, в Web.Release.config.Когда я публикую, содержимое connectionStrings в Web.Release.config не скопировано

Когда я публикую свой проект, содержание Web.Release.config не отображается в опубликованном Web.config. Зачем?

Web.config

<configuration> 
    <connectionStrings> 
     <!-- <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-SalvaVidas-20130610104655;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-SalvaVidas-20130610104655.mdf" /> --> 
    </connectionStrings> 

Web.Debug.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
     <add name="MyContext" 
      providerName="System.Data.SqlClient" 
      connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MyDb.mdf" /> 
    </connectionStrings> 

Web.Release.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
     <add name="MyContext" 
      providerName="System.Data.SqlClient" 
      connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyDb;Server=ServerName;Database=MyDb;Trusted_Connection=True;Integrated Security=SSPI;" /> 
    </connectionStrings> 
+0

Вы печататься в режиме отладки? – hoang

+0

@hoang: нет, он настроен для выпуска. – Fabricio

+0

Возможно, вам следует показать содержимое вашего web.release.config и соответствующей части вашего web.config – Jan

ответ

9

Проблема в том, что вы не используете Web.debug.config/Web.release.config как преобразование.

Вам нужно сделать:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
    <add name="MyContext" 
     connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SalvaVidas;Server=ServerName;Database=MyDb;Trusted_Connection=True;Integrated Security=SSPI;" 
     xdt:Transform="SetAttributes" 
     xdt:Locator="Match(name)"/> 
</connectionStrings> 

xdt:Locator запись будет найти запись в исходном Web.config атрибутом name, расположенный в connectionString > add. xdt:Transform изменит атрибуты на указанные в вашем Web.release/debug.config.

Однако это не будет работать в текущем состоянии вашего Web.config, потому что запись строки подключения закомментирована. Если вы оставите комментарий, вам необходимо изменить xdt:Transform на Insert.

Для получения дополнительной информации о Web.config преобразования, посмотрите на this MSDN entry

+0

(1) Мне нужно положить это как в debug/release.config? (2) Итак, если я раскомментирую defaultStringString, мне не нужно делать 'Insert'? – Fabricio

+0

@Fabricio Ну, если ваша строка подключения отличается, тогда да. Если вы раскомментируете свою запись 'Web.config', вам понадобится два' xdt: .. 'для вашей записи отладки и выпуска, если вам нужно ее изменить. –

+0

Если я использую 'SetAttributes',« DefaultConnection »не заменяется« MyContext ». Вставьте его вставить. – Fabricio

3

Это потому, что у вас нет атрибута xdt: Transform.

У вас есть несколько вариантов, но в этом случае вы, скорее всего, придется использовать в Web.Debug.config и Web.Release.config что-то вроде:

<connectionStrings> 
     <add name="MyContext" 
      providerName="System.Data.SqlClient" 
      connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MyDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MyDb.mdf" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

XDT: Атрибут Transform сообщает, что тег уже существует в исходном файле Web.config и что ему просто нужно заменить все атрибуты теми, которые вы предоставляете, и xdt: Locator сообщает ему, какой атрибут установки идентифицирует тег. В этом случае по строке подключения Name.

Поскольку преобразования выполняются только при выполнении DEPLOY (а не при запуске приложения), это означает, что вам нужно использовать xdt: Transform, потому что вы все еще хотите, чтобы строка подключения находилась на исходном web.config и только преобразовывать/заменять свои атрибуты при развертывании.

В некоторых других случаях преобразования вы можете использовать xdt: Transform = Insert, что означает, что параметр/запись не находится в исходном файле web.config, и преобразование будет вставляться только при развертывании.

+0

Что вы имеете в виду? можешь показать?Я еще не знаю этих деталей. – Fabricio

+1

Как указал Саймон, вам нужно раскомментировать строку подключения на исходном web.config, потому что, хотя это будет работать, если вы будете только развертывать, это не сработает, если вы отлаживаете/запускаете приложение локально. – GR7

+1

Я отредактировал ответ, чтобы подробно объяснить, Фабрицио. Надеюсь, поможет. – GR7

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