Почему msbuild дублирует записи в преобразованиях web.config?

Я использую преобразования web.config для вставки записей в web.config для определенных конфигураций сборки.

Например. мой Web.Test.config имеет эту запись:

<elmah>
    <errorMail from="[email protected]" to="[email protected]" async="false" smtpPort="25" smtpServer="mail" subject="test.senegal.co.uk Exception" xdt:Transform="Insert" />
</elmah>

Это прекрасно работает в визуальной студии.

Однако при создании пакета развертывания с помощью msbuild запись дублируется в файле web.config. Это, очевидно, вызывает исключение.

Есть идеи?

ОБНОВЛЕНИЕ

Моя «главная» конфигурация — это Web.Master.config, а не Web.config. Файл web.config перезаписывается при сборке в Visual Studio. Я думаю, что это должно быть как-то связано с этим.

Я думаю, что происходит то, что msbuild преобразует web.config, а не использует Web.Master.config.

Вопрос в том, как сказать ему использовать правильный мастер.


person Chris Haines    schedule 25.09.2012    source источник


Ответы (2)


Я добавил /p:TransformWebConfigEnabled=false к параметрам msbuild, так как мой файл web.config уже преобразовывался в цель BeforeBuild следующим образом:

<Target Name="BeforeBuild">
   <TransformXml Source="$(MSBuildProjectDirectory)\Web.Master.config" Transform="$(MSBuildProjectDirectory)\Web.$(Configuration).config" Destination="$(MSBuildProjectDirectory)\Web.config" />
</Target>
person Chris Haines    schedule 25.09.2012
comment
Вы сделали мой день. - person Joe Maffei; 30.07.2020

В моем случае дублирование было вызвано xdt:Transform="Insert". Если удалить его из Web..config и оставить остальные, он будет работать правильно, например:

<!-- doesn't work -->
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="My" 
     xdt:Transform="Insert" />

vs.

<!-- works -->
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="My" 
     />
person abatishchev    schedule 30.09.2014