我们正在为我们的内部 .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 的“正确”方法?
任何建议将不胜感激。