0

MEF を使用するコンソール アプリケーションがあります。ローカルでも、開発マシンにデプロイしても問題なく動作します。リリース マシンにデプロイすると、構成エラーがスローされます。

開発マシンとリリース マシンはどちらも仮想 SQL Server 2008 r2 マシンであり、仕様は同じで、ほとんど同じソフトウェアとコンポーネントがインストールされています。ビルドと展開のプロセスがありますが、ファイルを dev から release にコピーして実行しても、同じエラーが発生します。

MEF に必要な前提条件のうち、リリース コンピューターまたはアクセス許可に不足している可能性があるものはありますか?

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.EmailDispatcher'.

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

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

Resulting in: Cannot set import 'XXX.XXXX.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)
4

3 に答える 3

2

次のようにコードを追加しCompositionExceptionて、根本原因に関する情報を取得します。

catch (CompositionException e)
{
    // "unable to load one or more of the requested types" hints at a
    // ReflectionTypeLoadException, so cast to that
    var loadException = (ReflectionTypeLoadException)e.Errors.First(); 

    // as the error said,
    // "Retrieve the LoaderExceptions property for more information"
    var cause = loadException.LoaderExceptions.First();

    // print, log or extract the information in some other way 
    Debug.Print(cause.Message);
}

ただし、依存関係が欠落しているだけのようです。

于 2012-06-26T20:15:55.090 に答える
1

返信してくれてありがとう、MEFのデバッグに関する便利なヒント。

問題は、マシンに Entity Framework 4.1 がインストールされていなかったことです。MEF は、スローされるはずの例外を飲み込んでいました。私はそれを見つけることができませんでしたが、環境間で詳細な比較を行い、EF 4.1 をインストールして動作するかどうかを確認しました。

于 2012-06-27T14:43:34.150 に答える
0

動的にロードされるタイプのコンストラクターを確認してください。MEF は、役に立たない MEF エラーの背後にあるコンストラクターの問題を隠します。コンストラクターにエラー処理があることを確認してから、ログを追加して「実際の」例外をキャッチします。

于 2012-06-26T16:22:51.697 に答える