WiX: Heat вызывает предупреждение ICE69 для файлов с одинаковыми именами

Я разрабатываю установщик на основе WiX для приложения WPF. Количество файлов огромно и постоянно меняется, поэтому для генерации компонентов я использую утилиту heat.

& "$env:WIX\bin\heat.exe" dir $sourceDir -ag -dr INSTALLDIR -srd -sfrag -suid -cg ProductComponents -out Components.wxs

Многие из них имеют одинаковые имена, но хранятся в разных папках. Во время сборки утилита light выводит одно из следующих сообщений

warning LGHT1076 : ICE69: Mismatched component reference. Entry 'regCA7432986A287E1C45911B23DB39A11B' of the Registry table belongs to component 'AutoMapper.dll_1'. However, the formatted string in column 'Value' references file 'AutoMapper.dll' which belongs to component 'AutoMapper.dll'. Components are in the same feature. 

В сгенерированных файлах есть такие записи, как

<Component Id="AutoMapper.dll_1" Guid="*">
...
<File Id="AutoMapper.dll_1" KeyPath="yes" Source="SourceDir\Plugins\PluginName\AutoMapper.dll" />
<ProgId Id="Record" />
<RegistryValue Root="HKCR" Key="CLSID\{00ACB8EF-737F-3327-B129-C59300C5D5ED}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{00ACB8EF-737F-3327-B129-C59300C5D5ED}\InprocServer32\6.1.1.0" Name="Class" Value="AutoMapper.Configuration.MapperConfigurationExpression" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{00ACB8EF-737F-3327-B129-C59300C5D5ED}\InprocServer32\6.1.1.0" Name="Assembly" Value="AutoMapper, Version=6.1.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{00ACB8EF-737F-3327-B129-C59300C5D5ED}\InprocServer32\6.1.1.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{00ACB8EF-737F-3327-B129-C59300C5D5ED}\InprocServer32\6.1.1.0" Name="CodeBase" Value="file:///[#AutoMapper.dll]" Type="string" Action="write" />
...

Как видите, последняя строка кода [#AutoMapper.dll] вместо [#AutoMapper.dll_1], и такое поведение одинаково для остальных файлов с такими же именами. Что я могу сделать, чтобы предотвратить такое поведение и создать нормальные записи реестра?

Кстати, это реальная проблема или я могу игнорировать это?


person Pavel the coder    schedule 15.12.2017    source источник
comment
Пока файл одинаков в обоих местах, можно безопасно игнорировать ICE69, если у вас не может быть ситуации, когда они находятся в разных функциях и потенциально могут установить один со ссылками на другой, не устанавливая функцию другой входит в.   -  person Brian Sutherland    schedule 15.12.2017
comment
Вы не можете генерировать статические значения реестра, потому что значение [#AutoMapper.dll] зависит от того, где установлена ​​dll, которая является значением времени выполнения, когда вы фактически устанавливаете продукт.   -  person Brian Sutherland    schedule 15.12.2017


Ответы (1)


Я помню, что столкнулся с этим и с -suid, можете ли вы отказаться от этого аргумента, не влияя на ваш вариант использования? Если вам нужно сослаться на идентификатор файла где-то с ожидаемым значением, вы всегда можете использовать небольшое преобразование, чтобы помочь.

person Ritmo2k    schedule 15.12.2017
comment
Ну, удаление -suid не решает проблему. Во время сборки по-прежнему печатается огромное количество предупреждений. - person Pavel the coder; 26.12.2017