web-dev-qa-db-ja.com

C#GacUtilなしでGACにアセンブリを登録する方法は?

バッチファイルを使用してGACにアセンブリを登録する必要があります。 GacUtil.exeのインストール場所を見つける方法はありますか、またはGacUtilなしでアセンブリを登録する方法はありますか?

37
Benny F

GacUtilは、SDKインストールのみのフレームワークインストールではインストールされません。したがって、インストール先のボックスにインストールされることを保証できません。

これはバッチファイル内では機能しませんが、アプリケーションを自分で開発した場合は、以下で説明するGacInstallメソッドを使用できます。
http://msdn.Microsoft.com/en-us/library/system.enterpriseservices.internal.publish.gacinstall.aspx

あるいは、msiファイルを作成してアプリケーションを展開することをお勧めします。ここのチュートリアル:
http://www.dreamincode.net/forums/topic/58021-deploying-a-c%23-application-visual-studio-setup-project/

配布にGacUtil.exeのコピーを含めることはお勧めできません。別のライセンスが適用されており、再配布するライセンスが付与されていない可能性が高いためです。

25
Rich

最善の方法は、 this one などの Publish.GacInstall をラップするPowerShellスクリプトを使用することです

25
David Reis

次を実行して、dllをGAC(グローバルアセンブリキャッシュ)にインストールできます。

[Reflection.Assembly]::LoadWithPartialName("System.EnterpriseServices") | Out-Null 
[System.EnterpriseServices.Internal.Publish] $publish = new-object System.EnterpriseServices.Internal.Publish
$publish.GacInstall(<<FullFilePathToTheDll>>)

これは、ネイティブのPowerShellではほとんど必要ありませんが、PowerShellから.NETライブラリをインスタンス化して使用する必要があります

iisresetを実行します。

ソース

9
kamalpreet

InnoSetupを使用して、アセンブリを含むインストールを作成しました。

重要な行は次のとおりです。

Source: "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"; DestDir: "{app}"; StrongAssemblyName: "WinSCPnet, Version=1.3.7.7333, Culture=neutral, PublicKeyToken=2271ec4a3c56d0bf, ProcessorArchitecture=MSIL"; Flags: ignoreversion gacinstall uninsnosharedfileprompt
1
Carol