Этот вопрос относится к выводу файла heat.exe.Я пытаюсь сделать "правильную вещь" в отношении регистрации некоторых сборок .NET для взаимодействия COM в MSI.Regasm.exe - это неправильная вещь .
Прямой вызов regasm.exe, который прост и работает "в основном", по-видимому, не очень хорошая идея, говорит Роб Мэншинг .Это сообщение в блоге объясняет ПОЧЕМУ это не очень хорошая идея, а также предлагает очень простое решение.К сожалению, пост 2004 года предлагает функцию wix, которая сейчас устарела или не поддерживается.Я полагаю, что описанное здесь решение более не является действительным, но проблема, изложенная в этом сообщении, остается.
Видимо, «правильное» решение проблемы - запустить heat.exe, а затем «исправить» ссылки на каталоги и так далее.Это звучит достаточно просто, и это то, что я пытаюсь сделать.
хорошо, поэтому я пытаюсь поступить правильно.Также я не хочу GAC сборки, что означает, что я должен сделать регистрацию COM с аргументом codebase
.Вывод файла heat.exe включает в себя что-то вроде этого:
<RegistryKey Root="HKCR" Key="CLSID\{xxx-GUID-HERE-xxx-xxx}\InprocServer32\1.2.3.4" >
<RegistryValue Name="Class" Value="My.DotNet.Classname.Here" Type="string" />
<RegistryValue Name="Assembly" Value="Strongname of .NET Assembly here" />
<RegistryValue Name="RuntimeVersion" Value="v2.0.50727" Type="string" />
<RegistryValue Name="CodeBase" Value="file:///[#fil4B562083D141F5A2F29E28A1BD09AF3E]" Type="string" />
</RegistryKey>
Первый вопрос: что такое 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
, но этого, по-видимому, не существует.