MEF - ошибка композиции в режиме выпуска, но не в режиме отладки - PullRequest
1 голос
/ 01 апреля 2012

Я использую следующие строки кода для инициализации контейнера MEF

       _mefContainer = new CompositionContainer(
                     new AggregateCatalog(
                     AssemblySource.Instance
                    .Select(x => new AssemblyCatalog(x))
                    .Where(AssemblyFilter)
                    .OfType<System.ComponentModel.Composition.Primitives.ComposablePartCatalog()));

        var batch = new CompositionBatch();
        batch.AddExportedValue<IWindowManager>(new WindowManager());
        batch.AddExportedValue<IEventAggregator>(new EventAggregator());
        batch.AddExportedValue(_mefContainer);

        OnConfigure(batch);

        _mefContainer.Compose(batch);

Все Parts принадлежат одному Assembly - без зависимостей!

Когда я запускаю приложение в DebugВ режиме все идет как по стенам,

Но, когда я переключаюсь в режим Release, я получаю CompositionException в этих строках кода

string contract = string.IsNullOrEmpty(key) ?  AttributedModelServices.GetContractName(serviceType) : key;
var exports = _mefContainer.GetExportedValues<object>(contract);

Я понял, когда пытаюсь сделать двойной вызов дляв этой строке я впервые вызываю метод (из окна просмотра), получаю CompositionException, но во второй раз это срабатывает ...

РЕДАКТИРОВАТЬ:

Вот как выглядит AssemblySource.Instance:

AssemblySource.Instance
Count = 24
[0]: {PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
[1]: {System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[2]: {MOCH.Infrastrcture.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[3]: {Caliburn.Micro.Contrib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[4]: {Caliburn.Micro, Version=1.3.1.0, Culture=neutral, PublicKeyToken=8e5891231f2ed21f}
[5]: {System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[6]: {MOCH.Bama.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[7]: {mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[8]: {PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
[9]: {System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[10]: {MOCH.Bama.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[11]: {WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
[12]: {MOCH.Infrastrcture.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[13]: {WPFToolkit.Extended, Version=1.6.0.0, Culture=neutral, PublicKeyToken=3e4669d2f30244f4}
[14]: {GIS.Bama, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[15]: {MOCH.Infrastrcture.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[16]: {System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[17]: {MOCH.Bama.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[18]: {System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[19]: {System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[20]: {MOCH.Bama.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
[21]: {System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
[22]: {Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
[23]: {MOCH.Bama.UI.Shell, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}

Хотел бы получить вашу помощь.

1 Ответ

0 голосов
/ 30 апреля 2012

Итак, я нашел проблему.это совершенно странно ..

Приложение использует NLog в качестве каркаса ведения журнала.

У меня есть отдельные конфигурации nlog для каждой среды (с использованием преобразования XML из http://sedodream.com/)

Вapp.config.realese Я установил атрибут nlog throwExceptions=false, и это является причиной ошибки!

Я сказал, что тотально странный ..?

Спасибо

...