2012-03-15 4 views
3

メモリを使用してWCFからアセンブリをロードします。AssemblyResolveでAppDomain.CreateDomainを使用するにはどうすればよいですか?

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 
Assembly[] assBefore = AppDomain.CurrentDomain.GetAssemblies(); 
foreach (byte[] binary in deCompressBinaries) 
    loadedAssembly = AppDomain.CurrentDomain.Load(binary); 

をしかし、私はAppDomain.CreateDomainを使用したい、ではない現在のドメイン:すべてはWHEN良い取り組んでいる

protected void LoadApplication() 
{ 
    this.ApplicationHost = AppDomain.CreateDomain("TestService", null, new AppDomainSetup 
    { 
     ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
    }); 

    ApplicationHost.AssemblyResolve += new ResolveEventHandler(OnAssemblyResolve); 
    foreach (AssemblyName asmbly in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()) 
    { 
     ApplicationHost.Load(asmbly); 
    } 
    List<byte[]> deCompressBinaries = new List<byte[]>(); 
    foreach (var item in AppPackage.Item.AssemblyPackage) 
     deCompressBinaries.Add(item.Buffer); 
    var decompressvalues = DeCompress(deCompressBinaries); 
    deCompressBinaries.Clear(); 
    deCompressBinaries = decompressvalues.ToList(); 

    foreach (byte[] binary in deCompressBinaries) 
     ApplicationHost.Load(binary); 

    Assembly[] assAfter = AppDomain.CurrentDomain.GetAssemblies(); 
} 

Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    return Assembly.Load(args.Name); 
} 

私は2つのクラスライブラリは、以下を使用してClassLibrary1のとClassLibrary2を持っています

namespace ClassLibrary2 
{ 
    public class Class1 : MarshalByRefObject 
    { 
     public Class1() 
     { 

     } 

     public int GetSum(int a , int b) 
     { 
      try 
      { 
       ClassLibrary1.Class1 ctx = new ClassLibrary1.Class1(); 
       return ctx.Sum(a, b); 
      } 
      catch 
      { 
       return -1; 
      } 
     } 

     public int GetMultiply(int a, int b) 
     { 
      return a * b; 
     } 
    } 
} 

Classlibrary2はClassLibrary1に依存します。だから私はassemblyresolverを使用しています。しかし、私はApplicationHost.Load(バイナリ)でエラーを取得します。

Error: Could not load file or assembly 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

はまた、それはASSEMBLYRESOLVERを発射されていません。私のカーソルはAssemblyresolverメソッドには向かない。解決方法でAppDomain.CreateDomainを使用するにはどうすればよいですか?

+0

このQAの正確な複製はあります:http://www.rqna.net/qna/mqpzvv-how-to-use-appdomain-createdomain-with-assemblyresolve.html WTF? –

答えて

0

個人的には、バイト配列からアセンブリをロードするのが好きではありません。あなたのアセンブリを一時フォルダに保存して、そのフォルダからロードする方が良いと思います。この記事をご覧ください:Application Domains is hard…

+1

リンクが壊れています=( – killthrush

+0

リンクが壊れています:「サーバーエラー/アプリケーション」リソースが見つかりません説明:HTTP 404. '" –

+0

すべてのリンクが壊れています... /誰かがそれを理解しましたか? – JobaDiniz

関連する問題