使用InstallShield将程序集注册到GAC

时间:2010-03-26 16:14:28

标签: .net gac installshield

我必须使用InstallSheild向GAC注册多个程序集,同时我还需要在INSTALLDIR上复制程序集。最好的方法是什么?另外我需要调用regasm.exe来进行程序集;我可以使用InstallShield吗?

我真的需要为每个必须在GAC注册的程序集提供一个新的“组件”吗?

2 个答案:

答案 0 :(得分:11)

此答案假设您使用的是Windows Installer项目类型。

1)为每个DLL文件创建一个组件,将其作为密钥文件,并将目标文件夹设置为GlobalAssemblyCache。这指示Windows Installer使用MsiPublishAssemblies标准操作,该操作又调用Fusion以在GAC中注册程序集。这实际上是GACUTIL为您所做的。请记住:GACUTIL不可再发行。如果程序集包含协同文件,请将它们作为协同文件添加到同一组件中。

2)如果程序集是ComVisible,则为每个DLL创建一个组件,将其标记为密钥文件并将.NET ComInterop设置为true。这将导致在构建时提取COM信息,并告诉Windows Installer使用MsiPublishAssemblies标准操作将信息写入注册表。注意:如果在程序集的注册部分中有自定义用户代码,则不会捕获该代码。这是每个MSDN regasm /regfile不执行此代码路径。您必须手动将此信息输入InstallShield的该组件的注册表视图。

3)是的,您可以全局和/或私有地部署强名称程序集。是否会看到私有的取决于具有引用的程序集是否设置了UseSpecific。

答案 1 :(得分:0)

是。就系统而言,这是两个不同的文件。 AFAIK,你不能在GAC中有一个文件,并且它同时存在于目标计算机上的随机文件夹中。

理论上,如果它在GAC中,则在产品目录中不需要它。如果它在GAC中,那将是加载的版本,而不是产品目录中的版本。但是,如果你需要为COM互操作注册它,那就更难了。我可能错了,但是当我尝试时,我必须同时拥有:一个在目录中,一个在GAC中。

但实际上,如果您需要在产品目录中,则可能在GAC中不需要它。如果它始终从任何程序加载,那么GAC就是一个不错的选择。如果你把它放在GAC for COM interop中,那就没必要了;通过将其指向您已安装的文件夹来注册它将正常工作,如果您正确配置了installshield。