2014-02-02 1 views
4

Использование this online tester, легко увидеть следующую проблемупреобразования Web.config движущихся объявление пространства имен

У меня есть web.config, который выглядит как:

<?xml version="1.0"?> 
<configuration> 
    <nlog/> 
</configuration> 

И преобразование, которое выглядит следующим образом:

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <xdt:Import assembly="AppHarbor.TransformTester" namespace="AppHarbor.TransformTester.Transforms"/> 

    <nlog xdt:Transform="Replace" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <targets async="true"> 
     <target name="LogMill" xsi:type="FallbackGroup" returnToFirstOnSuccess="true"> 
     <target xsi:type="LogMillMessageBus"/> 
     <target xsi:type="File" fileName="..\LogMill-FailSafe.log" layout="${TextErrorLayout}"/> 
     </target> 
    </targets> 
    </nlog> 
</configuration> 

Но результат не является тем, что я ожидаю, он переносит объявление пространства имен xsi на элемент, который его использует, что приводит к тому, что nlog не может проанализировать конфигурацию с ошибкой Parameter p4 not supported on FallbackGroupTarget

<?xml version="1.0"?> 
<configuration> 
    <nlog> 
    <targets async="true"> 
     <target name="LogMill" p4:type="FallbackGroup" returnToFirstOnSuccess="true" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance"> 
     <target p4:type="LogMillMessageBus" /><target p4:type="File" fileName="..\LogMill-FailSafe.log" layout="${TextErrorLayout}" /> 
     </target> 
    </targets> 
    </nlog> 
</configuration> 

Есть вариант преобразования или синтаксис, который я могу применить, чтобы предотвратить его перемещение объявления пространства имен? Я не мог найти что-нибудь в the documentation

+3

Похоже, просто удалив Xmlns: XSI укомплектовать и просто иметь тип = «...» вместо xsi: type = "..." в файле преобразования работает, но было бы неплохо сохранить декларацию для улучшения редактирования в визуальной студии. – BrandonAGr

+2

Обходной путь (или, может быть, решение? Я не уверен), но если вы повторно разместите пространство имен в исходной конфигурации '' и используя '' в вашем преобразовании, то он работает. – nemesv

+0

У меня была такая же проблема с преобразованиями web.config и nlog. Я избегал этой проблемы, удалив пространство имен в правиле преобразования, поскольку пространство имен действительно действительно необходимо для intellisense при работе в Visual Studio. Это не обязательно в среде выпуска. Я понимаю, что это уже больше года, но думал, что мой комментарий может помочь кому-то. –

ответ

1

Переместите xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" декларацию верхнего элемента, и это должно быть хорошо