2014-09-20 9 views
1

У меня возникли проблемы с выяснением того, как преобразовать файл web.config, когда установлен его пакет NuGet. Он выполняет некоторые преобразования, но не все из них.Nuget web.config.install.xdt не преобразовывается

Вот нетронутым файл web.config, что мне нужно изменить после установки моего пакета NuGet:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    <system.web> 
    <authentication mode="None" /> ***** I want this removed ***** 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> ***** I want this removed ***** 
    </modules> 
    </system.webServer> 
</configuration> 

Вот что я хочу, как результат:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="MvcMailer.BaseURL" value="" /> 
    <add key="SecurityGuardEmailFrom" value="[email protected]" /> 
    <add key="SecurityGuardEmailSubject" value="Your Password has been reset." /> 
    <add key="SecurityGuardEmailTemplatePath" value="~/MailerTemplates/ResetPassword.html" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/SGAccount/Login" timeout="2880" /> 
    </authentication> 
    </system.web> 
    <system.webServer> 
    <modules> 
    </modules> 
    </system.webServer> 
</configuration> 

Это трансформировали сеть. config файл в приложении MVC, который является неправильным:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="MvcMailer.BaseURL" value="" /> 
    <add key="SecurityGuardEmailFrom" value="[email protected]" /> 
    <add key="SecurityGuardEmailSubject" value="Your Password has been reset." /> 
    <add key="SecurityGuardEmailTemplatePath" value="~/MailerTemplates/ResetPassword.html" /> 
    </appSettings> 
    <system.web> 
    <authentication mode="None" /> ***** Not removed when it should be ***** 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/SGAccount/Login" timeout="2880" /> 
    </authentication> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> ***** Not removed when it should be ***** 
    </modules> 
    </system.webServer> 
</configuration> 

И это мое мы b.config.install.xdt файл:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <system.web> 
    <authentication mode="None" xdt:Transform="Remove" xdt:Locator="Match(mode)" /> 
    <authentication mode="Forms" xdt:Transform="Insert"> 
     <forms loginUrl="~/SGAccount/Login" timeout="2880" /> 
    </authentication> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" xdt:Transform="Remove" xdt:Locator="Match(name)" /> 
    </modules> 
    </system.webServer> 
</configuration> 

Я прочитал всю документацию на сайте Nuget.org о том, как использовать XDT преобразование, и он даже работает на этом сайте тестера; https://webconfigtransformationtester.apphb.com/, но он не работает в действии.

Я в тупике. Любые предложения о том, как сделать эту работу?

+1

Ваше преобразование, как написано, похоже, не работает на сайте webconfigtransformationtester. Он терпит неудачу, потому что первый локатор пытается совпадения с атрибутом имени, которого нет. Первое совпадение локатора должно быть «xdt: Locator =« Match (mode) »' –

+0

@MattWard - вы правы, я ошибся с этим примером. В противном случае он должен работать в тесте, но он все равно не работает при установке пакета Nuget. –

+0

Ваше преобразование кажется прекрасным для меня, используя NuGet 2.8.1 в Visual Studio. –

ответ

1

Вот что новый web.config.install.xdt выглядит так обработал работу успешно:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <appSettings> 
    <add key="SecurityGuardEmailFrom" value="[email protected]" xdt:Transform="Insert" /> 
    <add key="SecurityGuardEmailSubject" value="Your Password has been reset." xdt:Transform="Insert" /> 
    <add key="SecurityGuardEmailTemplatePath" value="~/MailerTemplates/ResetPassword.html" xdt:Transform="Insert" /> 
    </appSettings> 
    <system.web> 
    <authentication mode="Forms" xdt:Transform="SetAttributes" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/SGAccount/Login" timeout="2880" xdt:Transform="Insert" /> 
    </authentication> 
    </system.web> 
    <system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" xdt:Transform="Remove" /> 
    </modules> 
    </system.webServer> 
</configuration> 

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