在GAC中注册程序集似乎有很多不同的方式,就像在“工作”一样。 但是,做到这一点的“正确”方式是什么?
为了回应Lou Franco(和gacutil):
我正在使用Gacutil进行开发,但是在我看来,这并不是正确的安装方式,因为gacutil不包括在.NET 1.1以前的基本.NET实用程序中 – 它只是一个开发工具。
其他:Gacutil(如下面的回复中所示)不可再发行,因此不应该用于任何您打算提供给非开发人员的应用程序。 AKA,客户。 请参阅由Aaron Stebner撰写的博文(和评论) 。
为了响应使用WIX:
WIX可能是伟大的,但它是如何工作的? 什么细节使得WIX安装程序集的方式正确地安装它? 它是如何查找它? 这是一个系统/ .NET的电话? 是否有一些需要被埋在System32中某个dll中的调用?
(编辑:它看起来像WIX使用微软底部。看到我的意见在接受的答案。)
最终编辑:看起来像GAC安装程序集的正确方法是使用Windows安装程序,没有别的。 我要给威克斯一个尝试。 谢谢大家!
用Wix我会做这样的事情:
<DirectoryRef Id =“MyDirectory”> <Component Id =“MyComponent”Guid =“PUT-GUID-HERE”DiskId =“1”> <File Id =“MyAssembly”Name =“MyAssembly.dll”Assembly =“.net”KeyPath =“yes”Source =“MyAssembly.dll”/> </成分> </ DirectoryRef>
当您在WiX中使用属性Assembly =“。net”作为文件时,它将在此组件的MsiAssembly和MsiAssemblyName表中创建条目,并将其标记为GAC组件。
它看起来应该避免gacutil; 这不是一个可再发行的应用程序。 相反,安装它们的“正确”方式似乎是使用MSI,一种方法是WIX,由CheGueVerra或其他脚本发布。
使用System.EnterpriseServices.Internal.Publish
的GacInstall
方法。
优点:似乎是一个内部工具。 大概做所有正确的东西。
缺点:作为安装程序的一部分,您仍然需要制作并运行一个调用此应用程序的应用程序(除非您制作的安装程序是自定义应用程序,无论如何)。
您的安装程序制造商是否有将程序集安装到GAC的方法? 就我个人而言,我会说GACUTIL:
http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx
如果你不想自己处理gacutil的东西,你总是可以在visual studio中创建一个安装项目。
但我会坚持gacutil我自己。
使用gacutil。
优点:似乎总是工作。 缺点:
最好的方法是使用gacutil -i Library.dll
。
gacutil的唯一问题是它不在系统的默认路径中。 但是,在一个固定的位置相对于Windows目录,一个给定的.Net Framework版本。 所以你可以使用下面的命令行从任何地方执行它:
%SystemRoot%\Microsoft.Net\Framework\v1.1.4322\gacutil -i
PS:只是将你的程序集复制到c:\ windows \ assembly中将不起作用。 资源管理器只显示文件夹的简化视图,其中实际上包含不同类型的程序集的许多不同的文件夹。 在安装程序中进行拷贝不会触发所有由资源管理器执行的操作。 (写在这里,因为我没有足够的声誉尚未评论其他职位)。
直接复制到%WINDIR%\ Assembly。
优点:直截了当。
缺点:AFAIK,%WINDIR%\ Assembly 恰好是现在的位置,它的位置可能会发生变化。 这将使它在未来版本的Windows中打破,或者如果该文件夹的行为chaneges。 这可能不是正确的方法。
极端的缺点:如疯狂所说:
只是将你的程序集复制到c:\ windows \ assembly中将不起作用。 资源管理器只显示文件夹的简化视图,其中实际上包含不同类型的程序集的许多不同的文件夹。 在安装程序中进行拷贝不会触发所有由资源管理器执行的操作。 (写在这里,因为我没有足够的声誉尚未评论其他职位)。