バイト配列だけを使用してアセンブリをロードすることを試していますが、正しく動作させる方法を理解できません。ここでの設定は次のとおりです。バイト配列アセンブリのロード
public static void Main()
{
PermissionSet permissions = new PermissionSet(PermissionState.None);
AppDomainSetup setup = new AppDomainSetup { ApplicationBase = Environment.CurrentDirectory };
AppDomain friendlyDomain = AppDomain.CreateDomain("Friendly", null, setup, permissions);
Byte[] primary = File.ReadAllBytes("Primary.dll_");
Byte[] dependency = File.ReadAllBytes("Dependency.dll_");
// Crashes here saying it can't find the file.
friendlyDomain.Load(dependency);
AppDomain.Unload(friendlyDomain);
Console.WriteLine("Stand successful");
Console.ReadLine();
}
私は2つのモックDLLを作成し、システムは物理的なファイルを見つけることができないように、意図的に「.dll_」に自分の拡張子の名前を変更しました。 primary
とdependency
塗りつぶし正しく、私はバイナリデータでAppDomain.Load
メソッドを呼び出すしようとすると、それはして戻ってくる両方:それは、ファイルシステムを検索することになるのはなぜ
Could not load file or assembly 'Dependency, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
?
UPDATE
この一方で動作するようです:
public class Program {
public static void Main() {
PermissionSet permissions = new PermissionSet(PermissionState.Unrestricted);
AppDomainSetup setup = new AppDomainSetup { ApplicationBase = Environment.CurrentDirectory };
AppDomain friendlyDomain = AppDomain.CreateDomain("Friendly", null, setup, permissions);
Byte[] primary = File.ReadAllBytes("Primary.dll_");
Byte[] dependency = File.ReadAllBytes("Dependency.dll_");
// Crashes here saying it can't find the file.
// friendlyDomain.Load(primary);
Stage stage = (Stage)friendlyDomain.CreateInstanceAndUnwrap(typeof(Stage).Assembly.FullName, typeof(Stage).FullName);
stage.LoadAssembly(dependency);
Console.WriteLine("Stand successful");
Console.ReadLine();
}
}
public class Stage : MarshalByRefObject {
public void LoadAssembly(Byte[] data) {
Assembly.Load(data);
}
}
だから、AppDomain.Load
とAssembly.Load
に差がある表示されます。
依存関係DLLにはコピーされていない依存関係はありますか? –
プライマリは依存関係に依存します。依存関係には(CLR以外の)依存関係はありません。ランタイムのように開始するファイルを検索していないように見えます。 – sircodesalot