Tôi có tên miền ứng dụng con nơi tôi muốn tải một số thư viện dll khi khởi động và phát hành tệp để bất kỳ ai cũng có thể xóa chúng.Lắp ráp vào AppDomain con và phát hành tập tin dll
On khởi động tôi làm
Loader al = (Loader)domain.CreateInstanceAndUnwrap(
typeof(Loader).Assembly.FullName,
typeof(Loader).FullName);
al.Load(path)
cho lớp sau.
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);
}
}
Sau đó tôi gọi UseType
và tôi nhận được đúng loại nhưng tôi không thể để xóa các tập tin bất kỳ hơn bởi vì nó là như thể đứa trẻ app-miền đã bị khóa dll.
Về cơ bản những gì tôi muốn đạt được là lưu trữ tệp lắp ráp khi khởi động và sau đó sử dụng các cuộc gọi GetType
để tệp dll thực tế sẽ được phát hành.
Thực sự có thể đạt được điều gì đó như thế này không?
CreateInstanceAndUnwrap() cũng nhận được loại được tải vào tên miền ứng dụng chính. Khóa tệp nào. Sử dụng một loại giao diện, được định nghĩa trong một hội đồng riêng biệt. –
Tôi có thể có tệp chứa Trình tải bị khóa. Hoặc bất kỳ loại nào được sử dụng trong các phương thức của Trình tải sẽ làm cho nó được lắp ráp để được tải trong miền ứng dụng mẹ? – Egor
Xem thêm: http://stackoverflow.com/questions/6480140/appdomain-shadow-copying-not-working-original-assemblies-locked – cdiggins