WiX GAC安装和同一dll的regasm不起作用

时间:2010-10-06 12:31:37

标签: wix

我正在使用包含少量dll的WiX创建安装程序。在原始脚本中首先调用gacutil.exe,然后调用每个dll的regasm。将这个想法转移到WiX时我遇到了问题。以下是安装到GAC中的代码片段:

<Component Id="GMAG.Core.Serialization.dll" Directory="_2.2.8.0" Guid="{my_guid}"> <File Id="my.dll" Source="my_src" Assembly=".net" KeyPath="yes" Checksum="yes"/> </Component>

现在问题是WiX将如何执行程序集注册?我的问题是:

  1. 我无法在同一个组件中创建另一个<File Id="my.dll" Source="my_src" KeyPath="yes"/>因为必须只有一个keyPath =“yes”属性/组件。
  2. 我不能在组件级别放置keyPath =“yes”,因为它会破坏组件引用计数系统。
  3. 如果没有keyPath =“是”,我无法创建<File Id="my.dll" Source="my_src"/>,因为它会生成编译错误。
  4. 我无法创建单独的组件,因为两个组件将尝试安装相同的文件。
  5. 我知道在使用regasm时我无需致电regsvr32heat。在组件代码中:<File Id="my.dll" Source="my_src" KeyPath="yes"/>应该足以进行注册。 我正在使用热量,现在我被卡住了,因为我也必须进行装配注册。

2 个答案:

答案 0 :(得分:0)

Assembly =“。net”会将您的程序集放入GAC,然后您需要注册表项进行COM注册。如果你对程序集运行Heat,它应该生成你需要的代码片段。

答案 1 :(得分:0)

这就是我们如何通过WIX 3.5在GAC中注册DLL:

<Component Id="Level0GAC" Guid="21735A8C-DD0C-4f4e-8AB5-B5BB8C55726B" DiskId='1'>
                    <File Id='Level0' Name='DLLFileName.dll' DiskId='1' KeyPath="yes"
                      Source='DLLFileName.dll'
                      Checksum="yes" Assembly=".net" AssemblyManifest="Level0">
                    </File>
</Component>

实际上,组件中只能有一个文件,KeyPath设置为“是”,这就是为什么对于几个DLL你应该创建几个组件。