我有一个应用程序的清单文件,它看起来像这样:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="xxx.exe" version="1.1.0.0" type="win32" processorArchitecture="x86" />
<file name="xxxxxxxx.ocx" hashalg="SHA1">
<comClass clsid="{4xxxxxxx76-D693-4156-93BA-B938A56F15D3}" description="" threadingModel="apartment" />
<typelib tlbid="{8xxxxxx-3A75-4708-993D-6E0CD9564072}" version="1.0" helpdir="" flags="control,hasdiskimage" />
</file>
<dependency>
<dependentAssembly>
<assemblyIdentity name="Assembly numero uno" version="1.1.0.0" type="win32" publicKeyToken="7XXXXXXXXXXXD" />
</dependentAssembly>
</dependency>
</assembly>
我想在</dependency>
标签后面添加一个新的<dependency>
部分。新的<dependency>
应该是这样的:
<dependency>
<dependentAssembly>
<assemblyIdentity name="Assembly number two" version="1.1.0.0" type="win32" publicKeyToken="7XXXXXXXXXXXD" />
</dependentAssembly>
</dependency>
如何使用Wix实现这一点?
首先,考虑在构建时修改清单。如果可能的话,它更可取——总是选择构建时的复杂性而不是安装时的复杂性。
只有在<dependency>
元素内容取决于用户输入或目标系统状态的情况下,才将其保留到安装时间可能是有意义的。在这种情况下,您应该使用其中一个WiX选项来修改XML,可以是前面提到的XmlFile@OleksandrPshenychny,也可以是XmlConfig。我更经常使用后者,因为它似乎更灵活。
如果你决定在安装时修改清单,你仍然可以让你的生活更轻松。在构建时将XML模式添加到清单中,并且在安装时仅修改依赖于用户输入或系统状态的部分。假设它是assemblyIdentity/version
属性。然后WiX的片段可能看起来像这样:
<util:XmlConfig Id="VersionChange" ElementPath="assembly/dependency/dependentAssembly/assemblyIdentity[[]@name='Assembly number two'[]]" File="$(var.Manifest)" Name="version" Action="create" Node="value" On="install" PreserveModifiedDate="yes" Value="1.1.0.0" />
注意方括号转义技术。
您可以使用带有XmlFile元素的WisUtilExtetion库来对XML文件执行一些操作。有关更多详细信息,请访问此链接