1

ライブラリ クラスをグローバル アセンブリに追加するための主な手順に従います。

1 - Create a strong name key pair (/ArchieDLLTesting/bin/Debug/ArchieDLLTesting.snk)
2 - Sign the assembly via Visual Studio (Project property, Sign, Browse that file and Save)
3 - Installing into the GAC (gacutil –I /ArchieDLLTesting/bin/Debug/ArchieDLLTesting.dll)

これはライブラリのコードです(私が持っているユニーク/単一クラスの場合):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ArchieDLLTesting
{
    public class ArchieSayHello
    {
        public ArchieSayHello()
        {
        }

        public string SayHello()
        {
            return "Hello Archimedo";
        }
    }
}

すべての操作が成功しました! ここで、空のプロジェクトを開いて、たとえば次のように入力するとします。

using ArchieDLLTesting;

そのアセンブリが見つかりません。Windows/assembly/GAC_MSIL フォルダーを確認しましたが、DLL がありません。

ここで何が問題なのですか?

4

3 に答える 3

3

もちろん、DLL への参照を追加する必要があります。ステートメントを挿入するだけusingでは、GAC の DLL は使用されません。

于 2013-10-02T10:17:20.160 に答える
2

あなたのマシンはwin 7のようで、あなたのdll inC:\Windows\Microsoft.NET\assembly\GAC_64または C:\Windows\Microsoft.NET\assembly\GAC_32.itsはあなたのビットバージョンに依存しています。それらのフォルダを確認してください。should add as project referenceプロジェクト内のどの方法でも、そのdllは間違いなくあなたです。ランタイム フレームワークが GAC の dll から参照を取得したとき。

更新しました:

しかし、GAC dll プロジェクト [ ArchieDLLTesting] を更新し続ける場合は、再び GAC に注意してください。そうしないと、実行時にアプリケーションがそのアセンブリの古いバージョンを参照します。その場合、次のビルド後のイベントを使用して、その特定のプロジェクトで GAC にビルド イベントを自動的に追加できます。

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\x64\gacutil.exe" /i "$(TargetPath)"
于 2013-10-02T10:22:22.150 に答える
2

GACの意味を混乱させたと思います:

グローバル アセンブリ キャッシュは、多くのアプリケーションが必要とするアセンブリを格納できる中央リポジトリです。

アセンブリを GAC に配置すると、bin ディレクトリに物理アセンブリがなくても参照できます

フレームワークの組み立てについて考える

参照するときにローカルにコピーする必要はありません。

したがって、解決策は、その参照をプロジェクトに追加することです

とにかく、GAC にアセンブリを配置することはお勧めできません。

それらをそこに置く必要がある状況はほとんどありません。

いつアセンブリを GAC に展開する必要がありますか?

于 2013-10-02T10:25:47.510 に答える