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 = "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コンポーネントとしてマークされます。

于 2008-10-15T15:44:22.553 に答える
2

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

gacutilは避けるべきだと思われます。再配布可能なアプリではありません。代わりに、それらをインストールする「適切な」方法は、CheGueVerraまたは別のスクリプトによって投稿されたMSIを使用しているようです。1つの方法はWIXです。

于 2008-10-15T22:16:20.890 に答える
2

System.EnterpriseServices.Internal.PublishGacInstallメソッドを使用します。

利点: 内部ツールのようです。おそらくすべての正しいことをします。

短所: インストーラーの一部として、これを呼び出すアプリを作成して実行する必要があります (作成するインストーラーがそれを実行するカスタム アプリでない限り)。

于 2008-10-15T15:39:35.433 に答える
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 にコピーするだけでは機能しません。エクスプローラーには、フォルダーの簡略化されたビューのみが表示されます。実際には、さまざまな種類のアセンブリ用のさまざまなフォルダーが多数含まれています。インストーラーからコピーを実行しても、ドラッグ アンド ドロップでエクスプローラーによって実行されるすべての操作がトリガーされるわけではありません。(他の投稿にコメントするのに十分な評判がまだないため、ここに書きました)。

于 2008-10-15T15:41:48.017 に答える
-5

%WINDIR%\Assembly に直接コピーします。

利点: わかりやすい。

欠点: 私の知る限り、 %WINDIR%\Assembly はたまたま現在の場所にあり、その場所は変更される可能性があります。これにより、Windows の将来のバージョンで、またはそのフォルダーの動作が変更された場合に壊れます。これはおそらく正しい方法ではありません。

極端な欠点: madmath が言ったように:

アセンブリを c:\windows\assembly にコピーするだけでは機能しません。エクスプローラーには、フォルダーの簡略化されたビューのみが表示されます。実際には、さまざまな種類のアセンブリ用のさまざまなフォルダーが多数含まれています。インストーラーからコピーを実行しても、ドラッグ アンド ドロップでエクスプローラーによって実行されるすべての操作がトリガーされるわけではありません。(他の投稿にコメントするのに十分な評判がまだないため、ここに書きました)。
于 2008-10-15T15:35:31.870 に答える