이 문제로 3 일째에 갇혀 있는데 왜 작동하지 않는지 이상한 생각이 없습니다. 난 그냥 리플렉션을 사용하여 일부 정보를 읽고 외부에서 파일을 삭제하려면 외부 .dll을로드하고 싶습니다. 문제는 읽기 파일이 잠겨 있다는 것입니다. 가장 이상한 점은 두 파일 만 잠긴 상태이며 그 중 5 파일은 성공적으로 읽는 것입니다. ShadowCopy를 아무런 결과없이 시도했습니다. 나는 지금 단서가 없다.새 AppDomain 잠금 해제 파일
이 내 응용 프로그램 도메인 클래스 :
public class AppDomainExpander
{
private Type[] _types;
public Type[] Types
{
get { return _types; }
set { _types = value; }
}
public void Create(string domainName, string path)
{
AppDomainSetup aps = new AppDomainSetup();
aps.ShadowCopyFiles = "true";
AppDomain dmn = AppDomain.CreateDomain(domainName);
string typename = typeof(DomainCommunicator).FullName;
string assemblyName = typeof(DomainCommunicator).Assembly.FullName;
var inner = (DomainCommunicator)dmn.CreateInstanceAndUnwrap(assemblyName, typename);
inner.Create();
Assembly assembly = Assembly.LoadFrom(path);
Types = assembly.GetTypes();
AppDomain.Unload(dmn); //it's strange that the code even work because i try to unload domain before i get Types[]
}
public class DomainCommunicator : MarshalByRefObject
{
public void Create()
{
AppDomain.CurrentDomain.DomainUnload += new EventHandler(OnDomainUnload);
}
void OnDomainUnload(object sender, EventArgs e)
{
AppDomain.CurrentDomain.DomainUnload -= new EventHandler(OnDomainUnload);
}
}
}
그리고 내가 그것을 사용하려고하는 방법이 있습니다 :
var expander = new AppDomainExpander();
expander.Create("MyDomain", file.Path);
foreach (var type in expander.Types)