Sorting WiX Heat:组件的排序顺序
我希望能够将由heat生成的WXS文件与以前的版本进行比较,以便验证更改 但我找不到组件顺序背后的任何逻辑。生成的组件既不按Id也不按目录名排序。当我重新生成WXS文件并且添加了一些文件时,顺序总是完全不同的,这使得比较非常困难 有没有办法控制分拣顺序?如果组件按内部文件节点的源进行排序,则理想情况是。但任何固定的秩序对我来说都足够了 例如,对于下面的示例,如果组件按文件源排序,那就太好了。即Log4Net之前的AutoMapperSorting WiX Heat:组件的排序顺序,sorting,wix,Sorting,Wix,我希望能够将由heat生成的WXS文件与以前的版本进行比较,以便验证更改 但我找不到组件顺序背后的任何逻辑。生成的组件既不按Id也不按目录名排序。当我重新生成WXS文件并且添加了一些文件时,顺序总是完全不同的,这使得比较非常困难 有没有办法控制分拣顺序?如果组件按内部文件节点的源进行排序,则理想情况是。但任何固定的秩序对我来说都足够了 例如,对于下面的示例,如果组件按文件源排序,那就太好了。即Log4Net之前的AutoMapper <Component Id="cmpB83..." Di
<Component Id="cmpB83..." Directory="DIR.MYDIR" Guid="{2A49...}">
<File Id="filA272..." KeyPath="yes" source="$(var.MYVAR)\AutoMapper.xml" />
</Component>
<Component Id="cmp445..." Directory="DIR.MYDIR" Guid="{1C34...}">
<File Id="filB356..." KeyPath="yes" source="$(var.MYVAR)\Log4Net.xml" />
</Component>
我使用以下参数开始加热:
heat.exe dir MYDIR-gg-dr dir.MYDIR-srd-sreg-ke-cg compGroup.MYGROUP-var var.MYVAR-out..\MYOUTPUT.wxs
我使用WiX 3.11。由于两年来一直没有答案,我将展示我所做的: 我使用此代码通过生成文件中的“源”重新订购组件,并将其存储到副本中:
XDocument xdoc = XDocument.Load(filename);
XElement componentsFragment = xdoc.Root.Elements().ElementAt(1);
XElement componentGroup = componentsFragment.Elements().ElementAt(0);
List<XElement> components = componentGroup.Elements().ToList();
List<XElement> sortedComponents = components.OrderBy(one => one.Elements().ElementAt(0).Attribute("Source").Value).ToList();
componentGroup.RemoveNodes();
foreach (XElement component in sortedComponents)
{
componentGroup.Add(component);
}
xdoc.Save(resultFilename);
XDocument xdoc=XDocument.Load(文件名);
XElement componentsFragment=xdoc.Root.Elements().ElementAt(1);
XElement componentGroup=componentsFragment.Elements().ElementAt(0);
List components=componentGroup.Elements().ToList();
List sortedComponents=components.OrderBy(one=>one.Elements().ElementAt(0).Attribute(“Source”).Value).ToList();
componentGroup.RemoveNodes();
foreach(sortedComponents中的XElement组件)
{
componentGroup.Add(组件);
}
xdoc.Save(resultFilename);
由于两年来一直没有答案,我将展示我所做的:
我使用此代码通过生成文件中的“源”重新订购组件,并将其存储到副本中:
XDocument xdoc = XDocument.Load(filename);
XElement componentsFragment = xdoc.Root.Elements().ElementAt(1);
XElement componentGroup = componentsFragment.Elements().ElementAt(0);
List<XElement> components = componentGroup.Elements().ToList();
List<XElement> sortedComponents = components.OrderBy(one => one.Elements().ElementAt(0).Attribute("Source").Value).ToList();
componentGroup.RemoveNodes();
foreach (XElement component in sortedComponents)
{
componentGroup.Add(component);
}
xdoc.Save(resultFilename);
XDocument xdoc=XDocument.Load(文件名);
XElement componentsFragment=xdoc.Root.Elements().ElementAt(1);
XElement componentGroup=componentsFragment.Elements().ElementAt(0);
List components=componentGroup.Elements().ToList();
List sortedComponents=components.OrderBy(one=>one.Elements().ElementAt(0).Attribute(“Source”).Value).ToList();
componentGroup.RemoveNodes();
foreach(sortedComponents中的XElement组件)
{
componentGroup.Add(组件);
}
xdoc.Save(resultFilename);
虽然XML元素确实有顺序,但正如您所建议的,我认为顺序对WIX或Windows installer并不重要。你可以根据每一次的热度对它们进行分类。实现这一点的一种方法是将XSLT传递给适用于您的heat。(我希望有人能给出一个有意义的答案。)虽然XML元素确实有顺序,正如您所说,我认为顺序对WIX或Windows installer并不重要。你可以根据每一次的热度对它们进行分类。实现这一点的一种方法是将XSLT传递给适用于您的heat。(我希望有人能给出一个答案,让这个问题变得毫无意义。)