런타임에 어셈블리를 컴파일하고로드하는 방법을 찾으려고합니다. 기본 의도는 디스크가 아닌 데이터베이스에 저장하는 것입니다. 그래서 몇 가지 코드를 작성했지만 흥미로운 상황을 보았습니다.AppDomain.Load()에 대한 흥미로운 오류
이//SumLib
namespace SumLib
{
public class SumClass
{
public static int Sum(int a, int b)
{
return a + b;
}
}
}
// Console app
class Program
{
public static void AssemblyLoadEvent(object sender, AssemblyLoadEventArgs args)
{
object[] tt = { 3, 6 };
Type typ = args.LoadedAssembly.GetType("SumLib.SumClass");
MethodInfo minfo = typ.GetMethod("Sum");
int x = (int)minfo.Invoke(null, tt);
Console.WriteLine(x);
}
static void Main(string[] args)
{
AppDomain apd = AppDomain.CreateDomain("newdomain", AppDomain.CurrentDomain.Evidence, AppDomain.CurrentDomain.SetupInformation);
apd.AssemblyLoad += new AssemblyLoadEventHandler(AssemblyLoadEvent);
FileStream fs = new FileStream("Sumlib.dll", FileMode.Open);
byte[] asbyte = new byte[fs.Length];
fs.Read(asbyte, 0, asbyte.Length);
fs.Close();
fs.Dispose();
// File.Delete("Sumlib.dll");
apd.Load(asbyte);
Console.ReadLine();
}
}
코드는 라인이 AssemblyLoadEvent()
방법은 내가 콘솔에 숫자 9를 참조, 실행, 내가 주석을 제거하면 응용 프로그램 도메인이 어셈블리를로드 주석 삭제 완벽하게 실행 : 여기 내 코드입니다 , 메서드가 끝나면 apd.Load()
에서 "파일 또는 어셈블리를로드 할 수 없습니다."라는 오류가 발생합니다. 그것은 아주 합리적입니다.
질문 : 디스크에 어셈블리 파일없이 AssemblyLoadEvent()
메서드를 실행할 수있는 방법은 무엇입니까?
어떻게 든 원시 이진 데이터의 도움으로 실행되는 경우 appdomain이 Load()
메서드를 성공적으로 완료하는 방법이 있습니까?
바이트 []에서 어셈블리를로드하려고합니다. 그게 맞습니까? –
@ 샘 B : 네 맞습니다. –