У меня есть проект веб-приложения ASP.NET, который подключается к удаленной базе данных через Entity Framework. Во время отладки (например, при запуске проекта на моем локальном компьютере) IP-адрес в базе данных отличается от во время выпуска (например, после загрузки проекта на мой веб-сервер и запуска его из браузера). До сих пор я всегда вручную изменял строку подключения к базе данных в файле Web.config, чтобы переключаться между двумя (в основном мне приходилось использовать строки подключения, одну с именем "Debug" и одну "Release"), и я просто обменивался именами при каждом развертывании).
Теперь я только что заметил, что можно позволить этому происходить автоматически с помощью синтаксиса преобразования Web.config, где вы помещаете измененную строку подключения в версию Web.Release.config, и она должна затем использовать ее при сборке библиотеки DLL в конфигурации выпуска,
Однако это не похоже на работу для меня...
Вот соответствующая часть моего обычного файла Web.config (который содержит строку подключения Debug для локального использования):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<!-- Debug connection string. Release connection string is in Web.Release.config file -->
<add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Вот файл Web.Release.config, который в соответствии с примерами должен заменить строку подключения "DatabaseEntities" "A" на "B", если DLL находится в режиме Release:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
<connectionStrings>
<add name="DatabaseEntities"
connectionString="B"
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
(Очевидно, "A" и "B" - просто заполнители для моих реальных строк соединения)
Когда я отлаживаю приложение (например, просто нажимаю F5), по умолчанию используется Web.config, и я могу получить доступ к базе данных. Затем я изменяю конфигурацию сборки на Release через Configuration Manager. Все проекты в решении настроены на выпуск конфигурации. Затем я строю решение (просто через Build или даже через полную перестройку (например, Clean, Rebuild)). Я загружаю недавно созданные библиотеки DLL на веб-сервер, а также файлы Web.config и Web.Release.config, и когда я пытаюсь получить доступ к базе данных, я не могу, она все еще пытается получить доступ к базе данных через IP-адрес отладки. и, следовательно, не может найти его...
Кажется, файл Web.Release.config полностью игнорируется или, по крайней мере, строка подключения не заменяется.
Что я делаю неправильно? Является ли синтаксис преобразования неправильным? Я правильно не собираю приложение в режиме Release?