1

我正在为我的 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 不是问题,因为它们是唯一的并且更改文件名有效。

有人有想法吗?

4

2 回答 2

1

错误消息正确,但不确认 Id 是由 WiX 生成的。为了减少混乱,WiX 的后续版本越来越多地允许省略某些属性,因为它们通常不需要在创作的其他部分中引用。

根据架构文档File/@Id 必须是唯一的。

此 File 元素的唯一标识符。如果省略 Id,则默认为 Source 属性的文件名部分(如果指定)。可以通过指定 [#value] 作为属性引用。

您只需要一个或两个 File 元素的 Id 属性,以便分配和生成的 File/@Id 元素是唯一的。

于 2013-08-19T20:23:45.537 回答
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" />
于 2013-08-19T20:26:49.947 回答