我有孩子的應用程序域,我想在啓動和發佈文件時加載一些dll庫,這樣任何人都可以刪除它們。將程序集加載到子AppDomain併發布dll文件
在啓動時我對下面的類做
Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)
。
class Loader : MarshalByRefObject
{
internal void Load(string path)
{
Assembly assembly;
try
{
assembly = Assembly.Load(File.ReadAllBytes(path));
}
catch (Exception) { return; }
}
internal UseType(string fullyQualifiedTypeName)
{
Type userType = Type.GetType(fullyQualifiedTypeName);
}
}
後來我調用UseType
,我得到了正確的類型,但我不能夠刪除的文件了,因爲它是因爲如果孩子應用程序域已鎖定DLL。
基本上我想實現的是在啓動時緩存程序集文件,然後使用GetType
調用,以便實際的dll文件將被釋放。
真的有可能實現這樣的事情嗎?
CreateInstanceAndUnwrap()獲取加載到主appdomain中的類型。其中鎖定該文件。使用在單獨程序集中定義的接口類型。 –
我可以讓包含Loader的文件被鎖定。或者Loader的方法中使用的任何類型都會使它的程序集在父應用程序域中加載? – Egor
另請參閱:http://stackoverflow.com/questions/6480140/appdomain-shadow-copying-not-working-original-assemblies-locked – cdiggins