質問

.NET アプリケーションに、必要な特定のアセンブリ (GAC またはアプリケーションの実行元フォルダー以外) を探す場所を指示するにはどうすればよいですか?たとえば、ユーザーの Temp フォルダーにアセンブリを配置し、参照されたアセンブリが temp フォルダーにあることをアプリケーションに認識させたいと考えています。

ありがとう

役に立ちましたか?

解決

あなたは AppDomain.AssemblyResolve のイベントを使用することができますカスタムアセンブリリゾルバを追加します。これはあなたが必要なアセンブリを取得するために他のディレクトリ、あるいはデータベースにポイントすることができます。

私もIsolatedStorageでデータベースとストアからアセンブリをダウンロードするために同様のコードを使用しています。完全なアセンブリ名のハッシュとしてファイル名。その後、データベースは唯一、あなたが解決し、将来のすべての解像度は、ファイルシステムによって提供される最初の時間にダウンロードする必要があります。 AssemblyResolveイベントについてのについての最もよいあなたがType.GetType()それを使用することができますし、シリアライザに内蔵されています。

static string lookupPath = @"c:\otherbin";

static void Main(string[] args)
{
    AppDomain.CurrentDomain.AssemblyResolve += 
        new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

static Assembly CurrentDomain_AssemblyResolve(object sender, 
                                              ResolveEventArgs args)
{
    var assemblyname = new AssemblyName(args.Name).Name;
    var assemblyFileName = Path.Combine(lookupPath, assemblyname + ".dll");
    var assembly = Assembly.LoadFrom(assemblyFileName);
    return assembly;
}

他のヒント

かかわる問題のいくつかについては、この議論を参照してください。

http://bytes.com/topic/c -sharp /回答/ 248203ダイナミックアセンブリローディングする

基本的に、あなたはののappBaseを変更することはできません それが作成された後のAppDomain。あなたはの一部としてそれを指定する必要があります。 デフォルトのお手伝いを文句を言わない、新しいものを作成する前に設定、 AppDomainます。

は、ロードするアセンブリは、現在の下のディレクトリにある場合 appBaseあなたが使用して相対パスを追加することができます AppendPrivatePath(relativePath)、その後、Assembly.Load使用 - ランタイム あなたのためのサブディレクトリを調べます。これが最善の/最も簡単な方法です それを扱うます。

System.Reflection.Assembly.LoadFrom(myFile);

http://msdn.microsoft.com/en-us/library/1009fa28.aspx

もう 1 つの方法は、この StackOverflow の質問のようにアセンブリ解決イベントを自分で処理することです。 .NETで実行時にアセンブリ検索パスにフォルダーを追加するにはどうすればよいですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top