如何使用wix将多个元素添加到XML配置文件中?
我正在尝试使用Wix编辑
XML文件.我正在使用与Wix 3.7捆绑在一起的WixUtilExtension. xml文件是在Visual Studio 2010中为C#应用程序创建的设置文件.在这个文件中,我使用的元素用于在数组中存储多个字符串值.这是未更改的设置文件的内容:
<configuration> <applicationSettings> <AppName.Properties.Settings> <setting name="StringArray" serializeAs="Xml"> <value> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> </ArrayOfString> </value> </setting> </AppName.Properties.Settings> </applicationSettings> </configuration> 我想添加< string> < ArrayOfString>的元素此文件中的元素.一种方法是使用< XmlConfig> wix / UtilExtension命名空间中的元素.我已将此元素添加到包含配置文件的组件,如下所示: <Component Id="ProductComponent" Guid="$(var.ConfigGuid)"> <File Source="SettingsFile.exe.config" KeyPath="yes" Id="FILE_config" /> <util:XmlConfig Name="string" Value="My value" File="[INSTALLFOLDER]SettingsFile.exe.config" Id="String1" On="install" Action="create" Node="element" ElementPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString" Sequence="100" /> </Component> 这导致添加一个< string>元素到< ArrayOfString>元件.要添加另一个< string>要设置文件的元素,必须将另一个XmlConfig元素添加到< Component>具有不同Id属性和Sequence属性的更高值的安装项目的元素,如下所示: <util:XmlConfig Name="string" Value="My second value" File="[INSTALLFOLDER]SettingsFile.exe.config" Id="String2" On="install" Action="create" Node="element" ElementPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString" Sequence="101" /> 安装msi后,< ArrayOfString>设置文件中的元素如下所示: <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <string>My value</string><string>My second value</string></ArrayOfString> 我发现可以设置< XmlConfig>的Value属性.属性为这样的属性的值: <Property Id="STRING1VALUE" Value="My value" /> <util:XmlConfig Value="[STRING1VALUE]" ... /> 这很好.我希望用户能够动态地在安装过程中添加多个值,以便可变数量的< string>元素可以添加到设置文件中. <?define values="My value;My second value"?> <?foreach value in $(var.values)?> <util:XmlConfig Name="string" Value="$(var.value)" File="[INSTALLFOLDER]SettingsFile.exe.config" Id="String$(var.value)" On="install" Action="create" Node="element" ElementPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString" Sequence="101" /> <?endforeach?> 这种方法存在一些问题: > foreach语句使用预处理器变量,该变量不能设置为属性的值. 我希望用户将字符串元素的值存储在一个Property中,该值用分号分隔值,然后在foreach语句中解析它们,如下所示: <Property Id="VALUES" Value="My value;My second value" /> <?foreach value in [VALUES]?> <util:XmlConfig Name="string" Value="$(var.value)" File="[INSTALLFOLDER]SettingsFile.exe.config" Id="String$(var.value)" On="install" Action="create" Node="element" ElementPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString" Sequence="101" /> <?endforeach?> 这会引发以下错误: The util:XmlConfig/@Id attribute's value,'String[VALUES]',is not a legal identifier. Identifiers may contain ASCII characters A-Z,a-z,digits,underscores (_),or periods (.). Every identifier must begin with either a letter or an underscore. 有什么办法可以用XmlFile或XmlConfig元素创建可变数量的元素吗? CustomAction是解决这个问题的唯一方法吗?
作为BdN3504的补充……而不是整体
<util:XmlConfig Name="string" Value="Dummy" File="[INSTALLFOLDER]SettingsFile.exe.config" Id="DummyEntry" On="install" Action="create" Node="element" ElementPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString" Sequence="1" /> <util:XmlConfig On="install" Action="delete" Id="DeleteDummyEntry" Node="element" File="[INSTALLFOLDER]SettingsFile.exe.config" VerifyPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString/string" ElementPath="/configuration/applicationSettings/AppName.Properties.Settings/setting[[]@name='StringArray'[]]/value/ArrayOfString" Sequence="2" /> 事情.我建议使用 <EnsureTable Id='XmlConfig' /> 这可确保XmlConfig表包含在输出MSI中,即使它是空的.(我本来只是把它作为评论..但我显然没有声誉) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |