1

我们正在为我们的内部 .NET 应用程序开发基于 Windows DSC 的部署系统。作为当前安装说明的一部分,有一个步骤可以编辑 .NET machine.config 文件。(是的,我知道我们的应用程序需要这个很糟糕,但我目前无法解决这个问题)。

我想知道其他人如何使用 DSC 管理“通用”配置文件?我看不出有什么方法可以很好地做到这一点,但很高兴能看到如何做到这一点。

我能想到的唯一方法是创建几个自定义 DSC 模块来管理部分 INI 文件和 XML 配置文件。

我提出具有以下规范的模块:

xIniSetting [string] #ResourceName
{
    IniFile = [string]
    Group = [string]
    Key = [string]
    [ Value = [string] ] # Only applicable if Ensure = Present
    [ Ensure = [string] { Absent | Present } ] 
    [ DependsOn = [string[]] ]
}

xXmlConfigElement [string] #ResourceName
{
    ConfigFile = [string]
    ParentSelector = [string] # XPath Selector of element parent
    ElementSelector = [string] # XPath Selector of element itself
    [ ElementXml = [string] ] # Only applicable if Ensure = Present
    [ Ensure = [string] { Absent | Present } ] 
    [ DependsOn = [string[]] ]
}

(注意:当目标可能不存在时,我不知道有任何方法可以获取任意 XPath 选择器并将其分解以获取父元素的选择器,因此我必须同时指定父元素和目标元素)

要将自定义设置组添加到 machine.config 我将声明如下内容:

xXmlConfigElement CompanySettingsDefinition
{
    ConfigFile = "$env:windir\ \Microsoft.NET\Framework64\v4.0.30319\Config\machine.config"
    ParentSelector = "//configuration/configSections"
    ElementSelector = "//configuration/configSections/section[@name='CompanySettings']"
    ElementXml = "<section name=\"CompanySettings\" type=\"System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />"
    Ensure = Present
}

xXmlConfigElement CompanySettingsConfiguration
{
    ConfigFile = "$env:windir\ \Microsoft.NET\Framework64\v4.0.30319\Config\machine.config"
    ParentSelector = "//configuration"
    ElementSelector = "//configuration/CompanySettings"
    ElementXml = "<CompanySettings><add key=\"SettingsKey\" value=\"SettingsValue\" /></CompanySettings>"
    Ensure = Present
}

创建这些模块是解决这个问题的“最佳”方法吗?我是否错过了一些关于 DSC 的“正确”方法?

任何建议将不胜感激。

4

2 回答 2

0

对于 .config 文件,没有一种万能的解决方案。你检查资源包xWebAdministration中的模块了吗?它有一个可用于更新应用程序配置文件。如果这不能解决您正在查看的问题,您可以在同一行中编写自定义资源。xWebConfigKeyValue

于 2015-03-14T03:37:11.590 回答
0

这正是我在我们的场景中所做的。

如果您对配置中的内容有更复杂的逻辑,那么我将构建一个封装该逻辑的资源。

于 2015-04-29T02:11:27.050 回答