Отладка/выпуск Web.Config
Я знаю, что web.config в Visual Studio 2010 обеспечивает возможность переключения из баз данных из режима отладки в режим выпуска.
Вот мой Web.Release.config:
<?xml version="1.0"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
<add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
Вот мой код Web.Debug.config:
<?xml version="1.0"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
<add name="Live1" connectionString="Data Source=Live;Initial Catalog=LiveDatabase;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
И это мой код Web.config:
<?xml version="1.0"?>
<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 -->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Когда я публикую свой проект, в моем файле Web.config ничего не отображается. Не отображается ли моя строка подключения к базе данных Live?
Ответы
Ответ 1
Преобразования web.config, которые являются частью Visual Studio 2010, используют XSLT, чтобы "преобразовать" текущий файл web.config в его .Debug или .Release версию.
В ваших файлах .Debug/.Release вам нужно добавить следующий параметр в поля строки подключения:
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"
Это приведет к тому, что каждая строка строки подключения найдет соответствующее имя и соответствующим образом обновит атрибуты.
Примечание. Вам не придется беспокоиться об обновлении параметра providerName в файлах преобразования, поскольку они не меняются.
Вот пример из одного из моих приложений. Здесь раздел файла web.config:
<connectionStrings>
<add name="EAF" connectionString="Data Source=NTSQLT\S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=XXXX" providerName="System.Data.SqlClient" />
</connectionString>
И здесь раздел web.config.release делает правильное преобразование:
<connectionStrings>
<add name="EAF" connectionString="Data Source=NTSQLP\S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=YYYY" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
Одно добавленное примечание: Преобразования возникают только при публикации сайта, а не при простое его с F5 или CTRL + F5. Если вам нужно запустить обновление с заданным конфигом локально, вам придется вручную изменить файл Web.config для этого.
Для получения дополнительной информации вы можете увидеть документацию MSDN
https://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx
Ответ 2
Это возможно с помощью ConfigTransform
сборки ConfigTransform
доступной в виде пакета Nuget - https://www.nuget.org/packages/CodeAssassin.ConfigTransform/
Все файлы преобразования "web. *.Config" будут преобразованы и выведены в виде серии файлов "web. *. Config.transformed" в выходной каталог сборки независимо от выбранной конфигурации сборки.
То же самое относится к файлам преобразования app. *. Config в не-веб-проектах.
и затем добавьте следующую цель к вашему *.csproj
.
<Target Name="TransformActiveConfiguration" Condition="Exists('$(ProjectDir)/Web.$(Configuration).config')" BeforeTargets="Compile" >
<TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" />
</Target>
Публикация ответа, поскольку это первая публикация Stackoverflow, которая появляется в Google по этой теме.
Ответ 3
Чтобы преобразование работало в разработке (используя F5 или CTRL + F5), я бросаю ctt.exe(https://ctt.codeplex.com/) в пакетах folder (packages\ConfigTransform\ctt.exe).
Затем я регистрирую событие pre-or post-build в Visual Studio...
$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config"
$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)web.config" transform:"$(ProjectDir)web.$(ConfigurationName).config" destination:"$(ProjectDir)web.config"
Для преобразований я использую расширение SlowCheeta VS (https://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5).
Ответ 4
Если вы замените все строки подключения на новостные для рабочей среды, вы можете просто заменить все строки подключения на производственные, используя этот синтаксис:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings xdt:Transform="Replace">
<!-- production environment config --->
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
<add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
....
Информация для этого ответа приведена из этого ответа и это сообщение в блоге.
notice. Как уже объяснили другие, этот параметр будет применяться только тогда, когда приложение опубликует не при запуске/отладке (путем нажатия F5).
Ответ 5
Чтобы преобразование работало в разработке (используя F5 или CTRL + F5), попробуйте это расширение:
https://github.com/Microsoft/slow-cheetah