我正在为我的ASP.net应用程序创建一个Wix安装程序包,但是在尝试添加多个Web.config文件时出现错误,即使它们位于不同的目录中。
到目前为止我的代码看起来像这样:
<Directory Id="INSTALLLOCATION" Name="Site" >
<Component Id="Web.Config" Guid="F9D6C6E5-887E-4D90-BDEB-5D16AAA8F194">
<File DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)\publish\Web.config" />
</Component>
<Directory Id="Account.Dir" Name="Account">
<Component Id="Account.Web.Config" Guid="53FC1820-3ADD-41C0-92D6-9A66348C33A4">
<File DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)\publish\Account\Web.config" />
</Component>
</Directory>
</Directory>
<Feature Id="DefaultFeature" ConfigurableDirectory="TARGETDIR" Level="1">
<ComponentRef Id="Web.Config"/>
<ComponentRef Id="Account.Web.Config"/>
<Feature>
我收到的错误消息是:"Duplicate symbol 'File:Web.config' found. This typically means that an Id is duplicated. Check to make sure all your identifiers of a given type (File, Component, Feature) are unique."
据我所知,您无法使用WIX两次安装相同的文件,但这些是不同位置的不同文件,只有相同的名称。当我重命名其中一个文件时,安装程序按预期工作,但这没有帮助,因为这两个文件都需要命名为Web.config。我不认为ID或GUID是一个问题,因为它们是唯一的,并且更改文件名有效。
有没有人有想法?
答案 0 :(得分:1)
错误消息正确但不承认WiX正在生成Id。为了减少混乱,连续版本的WiX越来越多地允许省略某些属性,因为它们通常不需要在创作的其他部分中引用。
根据schema documentation文件/ @Id必须是唯一的。
此File元素的唯一标识符。如果你省略Id,它 默认为Source属性的文件名部分,如果 指定。可以通过指定[#value]来引用它作为属性。
您只需要一个或两个File元素的Id属性,以便分配和生成的File / @ Id元素是唯一的。
答案 1 :(得分:0)
为每个文件元素指定唯一的ID属性:
<File Id="Web" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)\publish\Web.config" />
<File Id="Account" DiskId="1" KeyPath="yes" Source="$(var.SolutionDir)\publish\Account\Web.config" />