.net 使用InstallShield将程序集注册到GAC

.net 使用InstallShield将程序集注册到GAC,.net,gac,installshield,.net,Gac,Installshield,我必须使用InstallSheild向GAC注册多个程序集,并且我还需要在INSTALLDIR上复制这些程序集。最好的方法是什么?我还需要为程序集调用regasm.exe;我可以使用InstallShield执行此操作吗 我真的需要为每个必须在GAC中注册的程序集添加一个新的“组件”?是的。就系统而言,这是两个不同的文件。好了,你不能在GAC中有一个文件,同时将它放在目标计算机上的一个随机文件夹中 理论上,如果它在GAC中,那么产品目录中不需要它。如果它在GAC中,那将是加载的版本,而不是产品目

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


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

是的。就系统而言,这是两个不同的文件。好了,你不能在GAC中有一个文件,同时将它放在目标计算机上的一个随机文件夹中

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


但实际上,如果您需要在产品目录中使用它,您可能不需要在GAC中使用它。如果它是从任何地方的任何程序加载的,那么GAC是一个合适的地方。如果你把它放在GAC的COM互操作中,那是不必要的;通过将其指向已安装的文件夹进行注册,如果installshield配置正确,则可以正常工作。

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

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

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


3) 是的,您可以全局和/或私下部署强名称程序集。是否会看到私有工具栏取决于带有引用的程序集是否具有UseSpecific set。

我在C#中开发了一个windows工具栏。在这种情况下,DLL应该在GAC中,对吗?不一定。如果你的工具栏的使用者在他们的应用程序中使用它,那么他们只需要在你的应用程序的文件夹中使用它。克里斯,这是一个很好的方法来唤醒我的记忆!