3

実行時にメモリ(バイト配列)からクラスがロードされて「実行」されるJavaアプリケーションを移植しています。C#で同じことを達成しようとしていSystem.IO.FileNotFoundExceptionますが、バイト配列からアセンブリをロードしようとすると(AppDomain.Loadメソッドを使用して)問題(例外)が発生します。

static void Main(string[] args)
{
    var domain = AppDomain.CreateDomain("foo");

    domain.AssemblyResolve += new ResolveEventHandler(domain_AssemblyResolve);

    var assembly = domain.Load("MyAssembly");
}
static Assembly  domain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    // ...
    return Assembly.ReflectionOnlyLoad(File.ReadAllBytes(@"C:\MyAssembly.exe"));
}

このバイト配列をファイルシステムに永続化する必要なしにそれらをロードする方法はありますか?

アイデアを単純化するために、コードを動的に実行および変更(更新)する機能が必要です。アセンブリを「ロード/アンロード」するために、個別のアプリケーションドメインを使用します。

4

2 に答える 2

1

私はちょうどこのコードを試しました:

static void Main(string[] args)
        {

            var h = File.ReadAllBytes(@"C:\MyAssembly.exe");

            var g = Assembly.Load(h);            
        }

そしてそれはうまくいきました-例外はありませんでした。ターゲット アセンブリが存在することを 100% 確信していますか?

于 2010-07-01T13:38:28.447 に答える
0

依存関係はありますか?その場合は、最初にそれらをロードする必要があります。

于 2010-07-01T13:40:24.963 に答える