В WXS, как я могу ссылаться на файл, установленный с помощью другого компонента?

Этот вопрос относится к выводам программы heat.exe. Я пытаюсь поступить «правильно» в отношении регистрации некоторых сборок .NET для взаимодействия с COM в MSI. Regasm.exe - это неправильная вещь .

Вызов regasm.exe напрямую, который прост и работает «в основном», по-видимому, не лучшая идея, говорит Роб Меншинг . В этом сообщении в блоге объясняется, ПОЧЕМУ это не лучшая идея, а также предлагается очень простое решение. К сожалению, сообщение от 2004 года предлагает функцию wix, которая сейчас устарела или не поддерживается. Описанное там решение, я думаю, больше не действует, но проблема, изложенная в этом сообщении в блоге, остается.

По-видимому, «правильным» решением проблемы является запуск heat.exe, а затем «исправление» ссылок на каталоги и так далее. Звучит достаточно просто, и я пытаюсь это сделать.

Хорошо, я стараюсь поступать правильно. Также я не хочу GAC сборку, а это значит, что я должен выполнить регистрацию COM с аргументом codebase . Вывод heat.exe содержит что-то вроде этого:

    
      
      
      
      
    

Первый вопрос: что именно такое Value = "file: /// [# fil4B562083D141F5A2F29E28A1BD09AF3E]" ?

Мне кажется, что fil4B562083D141F5A2F29E28A1BD09AF3E - это идентификатор, который генерируется Wix; Идентификатор принадлежит элементу File в файле .wxs, который указывает путь к сборке (DLL), содержащей названный класс .NET. Итак, для чего конкретно нужен окторп? А квадратные скобки? и префикс file: /// ? Помогите мне разобраться в этом синтаксисе.

Причина, по которой я спрашиваю - я не хочу использовать этот идентификатор. У меня уже есть идентификатор файла, который отражает фактическое значение файла, но это НЕ ТО.

Но рассматриваемый файл установлен в другом компоненте. Когда я пытаюсь сослаться на этот файл, я получаю сообщение об ошибке такого типа:

  C:\dev\project\ComRegistration.wxs(397): warning LGHT1076: ICE69: Mismatched component reference. 
  Entry 'reg9652ABFDD2B970C523070996FE7BB510' of the Registry table belongs to 
  component 'C.ComRegistration'. However, the formatted string in column 'Value' references 
  file 'MyAssembly.dll' which belongs to component 'C.Main'. Components are in the same 
  feature. [C:\dev\project\MyProject.wixproj]

Как мне решить эту проблему?

Думаю, мне не нужен еще один элемент File в этом компоненте, ссылающийся на тот же файл файловой системы. Он уже установлен с другим компонентом (та же функция). Как я могу сослаться на него?

В основном мне нужен элемент вроде FileRef , но его явно не существует.

5
задан Rob W 18 December 2011 в 15:00
поделиться