繁体   English   中英

使用InstallShield将程序集注册到GAC

[英]Register assemblies to GAC using InstallShield

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

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

此答案假定您使用的是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设置。

是。 就系统而言,这是两个不同的文件。 AFAIK,您不能在GAC中拥有文件并同时将其放在目标计算机上的随机文件夹中。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM