14

似乎有许多不同的方法可以向 GAC 注册程序集,例如,它们“工作”。但是,“正确”的做法是什么?

回应 Lou Franco(和 gacutil):

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

附加:Gacutil(如下面的回复所示)不可再分发,因此不应在您打算提供给非开发人员的任何应用程序中使用。又名,客户。请参阅Aaron Stebner 的这篇博文(和评论)

作为对使用 WIX 的回应:

WIX 可能很棒,但它是如何在幕后工作的?哪些细节使 WIX 安装程序集的方式成为正确的安装方式?它是如何查找的?它是系统/.NET 调用吗?是否需要在 System32 中某处埋藏的 dll 中进行调用?

(编辑:看起来 WIX 在后台使用 MSI。请参阅我在接受的答案中的评论。)

最终编辑:看起来将程序集安装到 GAC 的正确方法是使用 Windows 安装程序,仅此而已。我要试试Wix。谢谢大家!

4

8 回答 8

17

使用 Wix,我会做这样的事情:

<DirectoryRef Id="我的目录" >
    <组件 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 组件。

于 2008-10-15T15:44:22.553 回答
2

使用System.EnterpriseServices.Internal.Publish'sGacInstall方法。

优点:似乎是一个内部工具。可能做所有正确的事情。

缺点:作为安装程序的一部分,您仍然需要制作并运行一个调用它的应用程序(除非您制作的安装程序是一个自定义应用程序)。

于 2008-10-15T15:39:35.433 回答
2

http://blogs.msdn.com/astebner/archive/2006/11/04/why-to-not-use-gacutil-exe-in-an-application-setup.aspx

看起来应该避免使用 gacutil;它不是一个可再分发的应用程序。相反,安装它们的“正确”方式似乎是使用 MSI,一种方式是 WIX,正如 CheGueVerra 或其他脚本所发布的那样。

于 2008-10-15T22:16:20.890 回答
0

使用 gacutil。

优点:似乎总是有效。缺点:

  • 必须使用您的安装程序打包一个额外的可执行文件。
  • 作为一个开发实用程序,似乎有额外的副作用(比如无论如何都强制安装)。
  • 不应包含在提供给客户的任何可再分发产品中。
于 2008-10-15T15:34:17.127 回答
0

您的安装程序制造商没有办法将程序集安装到 GAC 中吗?就你自己而言,我会说 GACUTIL:

http://msdn.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx

于 2008-10-15T15:35:28.483 回答
0

如果您不想自己处理 gacutil 的东西,您可以随时在 Visual Studio 中创建一个安装项目。

但我自己会坚持使用 gacutil。

于 2008-10-15T15:37:58.557 回答
-1

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

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

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

PS:只是将您的程序集复制到 c:\windows\assembly 是行不通的。Explorer 仅显示文件夹的简化视图,其中实际上包含用于不同类型程序集的许多不同文件夹。从安装程序中复制它不会触发资源管理器在拖放时完成的所有操作。(写在这里是因为我还没有足够的声誉来评论其他帖子)。

于 2008-10-15T15:41:48.017 回答
-5

直接复制到 %WINDIR%\Assembly。

优点:直截了当。

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

极端劣势:正如madmath所说:

只是将您的程序集复制到 c:\windows\assembly 是行不通的。Explorer 仅显示文件夹的简化视图,其中实际上包含用于不同类型程序集的许多不同文件夹。从安装程序中复制它不会触发资源管理器在拖放时完成的所有操作。(写在这里是因为我还没有足够的声誉来评论其他帖子)。
于 2008-10-15T15:35:31.870 回答