.net - 向GAC注册/安装大会的“正确”方式是什么?




windows installer (6)

在GAC中注册程序集似乎有很多不同的方式,就像在“工作”一样。 但是,做到这一点的“正确”方式是什么?

为了回应Lou Franco(和gacutil):

我正在使用Gacutil进行开发,但是在我看来,这并不是正确的安装方式,因为gacutil不包括在.NET 1.1以前的基本.NET实用程序中 - 它只是一个开发工具。

其他:Gacutil(如下面的回复中所示)不可再发行,因此不应该用于任何您打算提供给非开发人员的应用程序。 AKA,客户。 请参阅由Aaron Stebner撰写的博文(和评论)

为了响应使用WIX:

WIX可能是伟大的,但它是如何工作的? 什么细节使得WIX安装程序集的方式正确地安装它? 它是如何查找它? 这是一个系统/ .NET的电话? 是否有一些需要被埋在System32中某个dll中的调用?

(编辑:它看起来像WIX使用微软底部。看到我的意见在接受的答案。)

最终编辑:看起来像GAC安装程序集的正确方法是使用Windows安装程序,没有别的。 我要给威克斯一个尝试。 谢谢大家!



如果你不想自己处理gacutil的东西,你总是可以在visual studio中创建一个安装项目。

但我会坚持gacutil我自己。


最好的方法是使用gacutil -i Library.dll

gacutil的唯一问题是它不在系统的默认路径中。 但是,在一个固定的位置相对于Windows目录,一个给定的.Net Framework版本。 所以你可以使用下面的命令行从任何地方执行它:

%SystemRoot%\Microsoft.Net\Framework\v1.1.4322\gacutil -i

PS:只是将你的程序集复制到c:\ windows \ assembly中将不起作用。 资源管理器只显示文件夹的简化视图,其中实际上包含不同类型的程序集的许多不同的文件夹。 在安装程序中进行拷贝不会触发所有由资源管理器执行的操作。 (写在这里,因为我没有足够的声誉尚未评论其他职位)。


用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" />
    </Component>
</DirectoryRef>

当您在WiX中使用属性Assembly =“。net”作为文件时,它将在此组件的MsiAssembly和MsiAssemblyName表中创建条目,并将其标记为GAC组件。


使用gacutil。

优点:似乎总是工作。 缺点:

  • 必须用您的安装程序打包一个额外的可执行文件
  • 作为一个开发实用程序,似乎有其他副作用(如强制安装,无论如何)。
  • 不应该包含在给予客户的任何可再发行组件中。

直接复制到%WINDIR%\ Assembly。

优点:直截了当。

缺点:AFAIK,%WINDIR%\ Assembly 恰好是现在的位置,它的位置可能会发生变化。 这将使它在未来版本的Windows中打破,或者如果该文件夹的行为chaneges。 这可能不是正确的方法。

极端的缺点:如疯狂所说:

只是将你的程序集复制到c:\ windows \ assembly中将不起作用。 资源管理器只显示文件夹的简化视图,其中实际上包含不同类型的程序集的许多不同的文件夹。 在安装程序中进行拷贝不会触发所有由资源管理器执行的操作。 (写在这里,因为我没有足够的声誉尚未评论其他职位)。




gac