Публикация не трансформирует web.config? - PullRequest
13 голосов
/ 25 марта 2011

Я сделал 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.

В чем может быть проблема?Я правильно это делаю?

Ответы [ 5 ]

21 голосов
/ 08 октября 2014

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

16 голосов
/ 01 апреля 2011

Я обнаружил две вещи:

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

Как

<configuration>
  <location>
    <connectionStrings>

Вместо

<configuration>
  <connectionStrings>
4 голосов
/ 17 февраля 2016

Убедитесь, что в свойствах файла Web.Config Build Action установлено на Content.

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

0 голосов
/ 12 марта 2015

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

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

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

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

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

0 голосов
/ 23 мая 2013

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

...