2012-03-26 28 views
5

Tôi đã ứng dụng MEF hoạt động tốt khi chạy cục bộ, nhưng không hoạt động khi được gọi từ xa trên mạng chia sẻ.Thành phần MEF khi ứng dụng đang ở trên mạng chia sẻ

Tôi đang sử dụng Assembly.LoadFrom để tránh các vấn đề UNC, nhưng nhìn thấy tất cả các dll nằm bên cạnh exe, tôi thực sự không nghĩ đây là vấn đề, nhưng tôi đã thử nó theo bất kỳ cách nào.

Tôi cũng đã khắc phục sự cố ConfigurationManager.GetSection, có vẻ như đó là vấn đề thường gặp với quyền .NET 4, sau khi xem msdn.

Tôi đang cho phép <loadFromRemoteSources enabled="true"/> trong tệp cấu hình. Vì vậy, tôi không chắc chắn nơi mà vấn đề có thể được.

Chỉnh sửa: ProductDispatcher trong trường hợp ngoại lệ là xác định trong catalog.Parts.

Mã lập container và Danh mục:

var catalog = new AggregateCatalog(); 

var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

foreach (string file in Directory.GetFiles(dir, "XXX*.dll")) 
{ 
    var assembly = Assembly.LoadFrom(file); 
    catalog.Catalogs.Add(new AssemblyCatalog(assembly)); 
} 

var container = new CompositionContainer(catalog); 
var batch = new CompositionBatch(); 
batch.AddPart(this); 
container.Compose(batch); 

Import là (mà tôi đã cố gắng làm cho công chúng):

[ImportMany(typeof(IEntityTypeDispatcher))] 
private IEnumerable<IEntityTypeDispatcher> Dispatchers { get; set; } 

Một ví dụ về xuất khẩu là:

[Export(typeof(IEntityTypeDispatcher))] 
internal class ContactDispatcher : EntityTypeDispatcher<Contact> 

Lỗi ngoại lệ tôi nhận được là:

The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information. 

1) Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 

Resulting in: An exception occurred while trying to create an instance of type 'XXX.XXX.Dispatch.ProductDispatcher'. 

Resulting in: Cannot activate part 'XXX.XXX.Dispatch.ProductDispatcher'. 
Element: XXX.XXX.Dispatch.ProductDispatcher --> XXX.XXX.Dispatch.ProductDispatcher --> AssemblyCatalog (Assembly="XXX.XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

Resulting in: Cannot get export 'XXX.XXX.Dispatch.ProductDispatcher (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher")' from part 'XXX.XXX.Dispatch.ProductDispatcher'. 
Element: XXX.XXX.Dispatch.ProductDispatcher (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher") --> XXX.XXX.Dispatch.ProductDispatcher --> AssemblyCatalog (Assembly="XXX.XXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null") 

Resulting in: Cannot set import 'XXX.XXX.Dispatch.DispatcherRepository.Dispatchers (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher")' on part 'XXX.XXX.Dispatch.DispatcherRepository'. 
Element: XXX.XXX.Dispatch.DispatcherRepository.Dispatchers (ContractName="XXX.XXX.Dispatch.IEntityTypeDispatcher") --> XXX.XXX.Dispatch.DispatcherRepository 
(System.ComponentModel.Composition.CompositionException) 

    at System.ComponentModel.Composition.CompositionResult.ThrowOnErrors(AtomicComposition atomicComposition) 
    at System.ComponentModel.Composition.Hosting.ComposablePartExportProvider.Compose(CompositionBatch batch) 
    at System.ComponentModel.Composition.Hosting.CompositionContainer.Compose(CompositionBatch batch) 
    at XXX.XXX.Dispatch.DispatcherRepository.LoadDispatchers() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\DispatcherRepository.cs:line 71 
    at XXX.XXX.Dispatch.DispatcherRepository.get_Instance() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\DispatcherRepository.cs:line 34 
    at XXX.XXX.Dispatch.DispatcherRepository.GetDispatchers() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\DispatcherRepository.cs:line 21 
    at XXX.XXX.Dispatch.Dispatcher.get_Instance() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Dispatch\Dispatcher.cs:line 30 
    at XXX.XXX.Broker..ctor() in D:\Workspaces\XXX\Branches\Dev1\XXX.XXX\XXX.XXX\Broker.cs:line 52 

Dường như MEF không hoạt động tốt trong các trường hợp tin cậy một phần. Có điều gì tôi cần làm để đảm bảo mọi thứ đang hoạt động dưới sự tin tưởng đầy đủ không?

+0

tôi đã cùng một vấn đề với các dự án của tôi, nhưng tôi đã không may bao giờ có thể sửa lỗi này. :( – eandersson

Trả lời

3

Mặc dù bạn đã bật "tải từ nguồn từ xa", điều này có thể xảy ra do các tệp vẫn có thể có hạn chế đối với chúng.

NTFS hỗ trợ khả năng áp dụng siêu dữ liệu cho tệp trong luồng dữ liệu thay thế (ADS). Điều này sẽ bao gồm thông tin Khu vực (ví dụ: Vùng Internet, v.v.).

Điều này có thể gây ra sự cố với tệp nằm trên mạng của bạn, chúng có thể được phân loại trong Vùng Internet và do đó vẫn có khả năng bị chặn.

Kiểm tra bài viết này và xem nếu điều này sẽ giải quyết nó cho bạn: http://mikehadlow.blogspot.co.uk/2011/07/detecting-and-changing-files-internet.html

Các vấn đề liên quan