Tôi có một số mã C# (chúng ta hãy gọi nó là "kịch bản") Tôi đang biên dịch tại thời gian chạy. Nó sử dụng một giao diện trong chương trình chính của tôi mà tôi sử dụng để truy cập các chức năng của nó. Sau khi biên dịch xong, tôi có CompilerResults.CompiledAssembly
, trong trường hợp này tôi có thể CreateInstance(Type)
.Unload CodeDom biên dịch lắp ráp
Khi tôi hoàn thành việc sử dụng tập lệnh, tôi muốn bỏ hoàn toàn. Từ những gì tôi hiểu, tôi chỉ có thể làm điều này nếu tôi có thể tạo một miền ứng dụng riêng biệt: Loading DLLs into a separate AppDomain
tôi đã có một số câu hỏi cụ thể để triển khai thực hiện của tôi:
- Nếu tôi có nhiều kịch bản để biên dịch và muốn dỡ bỏ chúng độc lập, tôi có phải tạo các miền ứng dụng riêng biệt cho từng miền không?
- Tôi nên sử dụng tên miền ứng dụng nào? GUIDs sẽ là một ý tưởng tốt? Có tên nào tôi nên tránh mà có thể xung đột?
- Nếu hội đồng nằm trong miền ứng dụng riêng biệt, nó có gặp sự cố khi truy cập giao diện trong chương trình chính không? Tôi hiện đang làm
ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)
trước khi tôi biên dịch. - Tôi có thể sử dụng
CompilerParameters GenerateInMemory=true
hoặc tôi có phải lưu nó ở đâu đó không?
Tôi gặp sự cố khi làm việc này nên tôi đã nghiên cứu thêm. Có vẻ như tôi sẽ cần thực hiện thêm một số công việc để làm việc đó: http://www.devsource.com/c/a/Using-VS/Dynamic-Plugins-Using-the-codeAppDomaincode-Class-to-Load -and-Unload-Code /. Trừ khi có một cái gì đó mới trong các phiên bản sau này? –
Có vẻ như tôi đang may mắn. Vì tôi đang sử dụng .NET 3.5 Tôi có thể sử dụng Khung mở rộng được quản lý. Tất nhiên, tôi phải học nó ngay bây giờ. :) –
Có vẻ như tôi đang đi sâu hơn tôi muốn/mong đợi. MEF thực sự không thể dỡ bỏ các assembly vì nó không sử dụng một AppDomain riêng biệt. MAF (System.AddIn) có thể, nhưng phức tạp hơn nhiều để sử dụng. MAF và MEF có thể được sử dụng cùng nhau. Trong khi tôi thực sự muốn để có thể dỡ bỏ một hội đồng, tôi nghĩ rằng điều này sẽ phải chờ ít nhất cho phiên bản 2. –