Ich versuche, eine XML-Datei mit Wix zu bearbeiten. Ich verwende die mit Wix 3.7 gebündelte WixUtilExtension. Die XML-Datei ist eine Einstellungsdatei, die in Visual Studio 2010 für eine C# -Anwendung erstellt wurde. In dieser Datei verwende ich ein Element, das zum Speichern mehrerer String-Werte in einem Array verwendet wird. Dies ist der Inhalt der unveränderten Einstellungsdatei:Wie können mehrere Elemente zu einer XML-Konfigurationsdatei mit wix hinzugefügt werden?
<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>
I <string>
Elemente zum <ArrayOfString>
Element in dieser Datei hinzufügen möchten. Eine Möglichkeit dazu besteht in der Verwendung eines <XmlConfig>
Elements aus dem Wix/UtilExtension-Namespace. Ich habe dieses Element der Komponente hinzugefügt, die die Konfigurationsdatei wie folgt gilt:
<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>
Daraus ergibt sich die Zugabe von einem <string>
Element zum <ArrayOfString>
Element. So fügen Sie ein anderes <string>
Element in die Einstellungsdatei, ein weiteres XMLConfig Element mit einem anderen ID-Attribut und einen höheren Wert für die Sequenz zu dem <Component>
Element des Setup-Projekts hinzugefügt werden Attribut wie folgt aus:
<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"
/>
Nach der Installation der msi, sieht das <ArrayOfString>
Element in der Einstellungsdatei wie folgt aus:
<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>
ich habe herausgefunden, dass es möglich, den Wert Attribut eines <XmlConfig>
Attribut auf den Wert einer Immobilie wie folgt festgelegt ist:
<Property Id="STRING1VALUE" Value="My value" />
<util:XmlConfig Value="[STRING1VALUE]" ... />
Das ist gut. Ich möchte, dass der Benutzer in der Lage ist, mehrere Werte dynamisch in den Installationsprozess einzufügen, so dass der Einstellungsdatei eine variable Anzahl von <string>
Elementen hinzugefügt werden kann. Mein erster Ansatz war eine <?foreach?>
Anweisung wie folgt zu verwenden:
<?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?>
ein paar Probleme mit diesem Ansatz sind:
- Die foreach-Anweisung verwendet eine Präprozessor Variable, die auf den Wert nicht eingestellt werden Ein Besitz.
- Der Wert des Attributs Sequence bleibt gleich.
ich den Benutzer die Werte für die Textelemente in einer Eigenschaft speichern möchten, die die Werte durch ein Semikolon und dann analysieren sie in einer foreach-Anweisung wie folgt trennt:
<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?>
Dies führt den folgenden Fehler:
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.
Gibt es eine Möglichkeit, eine variable Menge von Elementen mit dem XmlFile oder dem XmlConfig Element zu erstellen? Ist die einzige Lösung für dieses Problem eine CustomAction?