<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>元素可以添加到设置文件中.
我的第一种方法是使用<?foreach?>声明如下:
<?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语句使用预处理器变量,该变量不能设置为属性的值.
> Sequence属性的值保持不变.
我希望用户将字符串元素的值存储在一个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是解决这个问题的唯一方法吗?
<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' />
原文地址:https://www.jb51.cc/xml/292092.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。