메모리를 사용하여 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를 사용하려면이 아닌 현재 도메인 :
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);
}
나는 두 클래스 라이브러리를 가지고으로 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 (binary); :
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을 사용합니까?
본 QA의 정확한 복제본은 다음과 같습니다. http://www.rqna.net/qna/mqpzvv-how-to-use-appdomain-createdomain-with-assemblyresolve.html WTF? –