wix XmlConfig语法

时间:2012-03-21 11:31:52

标签: wix wix3.5

我需要在安装过程中修改machine.config。我知道,我需要使用XMLConfig组件,但对我来说一切都不清楚:

  • 正如我所知,util:XmlConfig标签应放在Component标签内。组件标记应放在Directory标记内。我是否应该创建具有唯一ID的目录定义标记,以便与util:XmlConfig一起使用?你可以提供非常小的样本,包括我应该在我的案例中使用的整个组件和目录定义,让我了解它是如何工作的吗?

  • 我需要修改machine.config文件,路径是这样的:
    文件= “[WindowsFolder] Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config中”。
    但提供这样的路径是个好主意吗?也许我宁愿自动获取此路径(我的意思是.net框架版本号) - 这可能吗?

  • 我需要在machine.config中添加条目DbProviderFactories。如果要添加的条目已存在于文件中,该怎么办?它们会被添加,更换?如果他们将被添加两次,我该如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

如果您需要(我猜)只使用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
            );
    }
    
  3. 当然,你应该在之前创建第一个ObjectContext。