Преобразования web.config не применяются к специальному разделу - PullRequest
1 голос
/ 03 ноября 2010

Я новичок в преобразованиях web.config, но он работает для моей строки подключения.Однако мои преобразования для пользовательского раздела (nhibernate) не применяются.Вот файл преобразования:

<?xml version="1.0"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
   <connectionStrings>
    <add name="ApplicationServices"
         connectionString="Data Source=.\SQLEXPRESS;Database=msmri_Users;UID=myuser;pwd=mypass;"
         providerName="System.Data.SqlClient" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <appSettings>
    <add key="TableStorageEndpoint" value="http://127.0.0.1:10002/devstoreaccount1" xdt:Transform="Remove" xdt:Locator="Match(key)" />

  </appSettings>

...

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.connection_string" xdt:Transform="Replace" xdt:Locator="Match(name)">
        Data Source=.\SQLEXPRESS;Database=mydb;UID=myuser;pwd=mypass;
      </property>
    </session-factory>
  </hibernate-configuration>
</configuration>

Все идеи приветствуются.Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 мая 2012

Хитрость заключается в добавлении пространств имен xml к конфигурациям преобразования.

Вот пример настройки Web.config:

<section name="hibernate-configuration"     
         type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
...
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        ...
        <property name="show_sql">true</property>
        ...
    </session-factory>
</hibernate-configuration>

Теперь добавьте пространство имен xml в конфигурацию вашего преобразования. (например, Web.Release.config):

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
           xmlns:nhib="urn:nhibernate-configuration-2.2">
    ...
    <nhib:hibernate-configuration>
        <nhib:session-factory>
            <nhib:property name="show_sql" xdt:Locator="Match(name)" xdt:Transform="SetAttributes">false</nhib:property>
        </nhib:session-factory>
    </nhib:hibernate-configuration>

Код должен быть заменен так, как вы хотите.

0 голосов
/ 04 ноября 2010

Что ж, это не будет работать во всех ситуациях, но, исходя из моего комментария выше, если это действительно не поддерживается, я решил добавить строку подключения в connectionStrings и сослаться на нее из раздела конфигурации hibernate.Тогда мое преобразование все еще выполняется в одном из разделов конфигурации по умолчанию.Хотелось бы услышать, что это не реальное ограничение.

Позднее обновление: Итак, проблема здесь в разделах, содержащих атрибут xmlns - преобразование конфигурации их не обрабатывает.Обходной путь в некоторых случаях (например, с разделом assemblyBinding), где есть содержащий элемент, должен использовать Transform = "Replace" на родительском элементе, например так:

 <runtime xdt:Transform="Replace">
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="MySql.Data"
                     fullName="MySql.Data, Version=6.2.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
      </qualifyAssembly>
    </assemblyBinding>
  </runtime>

Это все еще не 'не работает для моего раздела nhibernate, единственным родителем которого является сам элемент конфигурации, но.,,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...