Синтаксис wix XmlConfig - PullRequest
       2

Синтаксис wix XmlConfig

0 голосов
/ 21 марта 2012

Мне нужно изменить machine.config во время процедуры установки. Я знаю, что мне нужно использовать компонент XMLConfig, но мне все еще не все ясно:

  • Как я понял, тег util: XmlConfig должен быть помещен внутри тега Component. Тег компонента должен быть размещен внутри тега Directory. Должен ли я создать тег определения каталога с уникальным идентификатором для использования с util: XmlConfig? Можете ли вы предоставить очень минимальный образец с полным описанием компонента и каталога, который я должен использовать в моем случае, чтобы я понял, как это действительно работает?

  • Мне нужно изменить файл machine.config, путь выглядит так:
    File = "[WindowsFolder] Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config".
    Но разве это хорошая идея, чтобы обеспечить путь, как это? Может быть, мне лучше получить этот путь автоматически (я имею в виду номер версии .net framework) - возможно ли это?

  • Мне нужно добавить запись DbProviderFactories в machine.config. Что если записи, которые я хочу добавить, уже присутствуют в файле? Они будут добавлены снова, заменены? Если они будут добавлены дважды, как я могу предотвратить это?

1 Ответ

0 голосов
/ 21 марта 2012

Если все, что вам нужно (как мне кажется), это использовать Entity Framework, вам не следует изменять файл machine.config.Это может быть опасно, так как вы можете непреднамеренно сделать его несовместимым.

Вместо этого вы можете выполнить следующую уловку:

  1. Получить данные конфигурации, которые уже прочитаныCLR:

    var dataSet = ConfigurationManager.GetSection("system.data") as System.Data.DataSet;
    
  2. Затем проверьте в первой таблице и третьем столбце этой таблицы имя инварианта вашего провайдера:

    bool bFound = false;
    foreach (DataRow row in dataSet.Tables[0].Rows)
    {
            if (row[2].ToString() == "EFOracleProvider")
            {
                 bFound = true;
                 break;
            }
    }
    // if this provider is not already listed in the table, then add it
    // set oracle provider parameters
    if (!bFound)
    {
           dataSet.Tables[0].Rows.Add(
                    provName,
                    provDesc,
                    provInvariant,
                    provAssembly
            );
    }
    

Конечно, вы должны сделать это до первого создания ObjectContext.

...