2011-07-27 18 views
1

私は、アプリケーションMyApplicationによって消費されるapi、MyApiを持っています。.NETアセンブリのバインド

MyApiには、.NET 4.0クライアントプロファイルを対象とする複数のdllがあります。例えば:

    • MyApi.Core
    • MyApi.Domain MyApi.Providers

    (よりすこし)

    展開簡略化のため、これらは

    にILMergedれます
    • MyApi.ClientProfile

    すべてのMyApis dllは強力な名前が付けられています。

    MyApplication内のすべてのプロジェクトはMyApi.ClientProfileを参照しています。

    私は今、いくつかのWeb機能をMyApiに追加しています。そこで、.NET 4.0 Extended Profileを対象としたdll MyApi.Webを追加しました。 MyApi.WebはMyApi.CoreとMyApi.Domain(およびSystem.WebのDLL)を参照します。

    また、MyApplication.Webプロジェクトもあります。 MyApplication(MyApi.ClientProfile dllへの参照を持つ)の他のいくつかのプロジェクトを参照します。 MyApplication.Webプロジェクトは、MyApi.Web dllを参照する必要があります。

    どうすればいいですか?

    MyApplication.WebからMyApi.CoreおよびMyApi.Domainへの参照を追加すると、MyApplication.Webの複数のアセンブリに存在する型が存在します。

    私はMyApplication.WebからMyApi.CoreとMyApi.Domainへの参照を追加しない場合、それはMyApi.CoreまたはMyApi.Domainを見つけることができないので、MyApi.Webはロードに失敗します(理由だけMyApi.ClientProfile存在する)。

    MyApiアセンブリの名前がす​​べて強く、失敗するため、アセンブリ解決イベントを処理できず、MyApi.Core/MyApi.DomainからMyApi.ClientProfileへの要求をリダイレクトできません。

    MyApi.ClientProfileは.NET 4.0クライアントプロファイル(MyApi.WebはSystem.Webなどへの参照があります)に対してサポートされる必要があるため、MyApi.WebをMyApi.ClientProfileにマージすることはできません。

    MyApi.WebをMyApi.ClientProfileを参照するように変更した場合、これはこの1つのケースでは機能するはずですが、別のアプリケーションがMyApi.CoreとMyApi.Domainを直接参照するため動作しないため理想的ではありません。

    MyApplication.Webに設定でbypassTrustedAppStrongNamesを指定させたくありません(この設定をMyApi.Webから何らかの形で受け入れることは、受け入れられるオプションかもしれません....)。

    だから、私はこの問題の適切な/エレガントな解決策を考えている。

    提案がありますか?

    ありがとうございました。

    答えて

    0

    私は実現に来た:

    あなたのアセンブリが同じ公開キートークンを持っている場合は、リダイレクトを行うことができますし、名前は重要ではありません。

    したがって、MyApi.ClientプロファイルはMyApi.Coreと同じキーで署名されているため、MyApi.WebでAssemblyResolveを処理すると、MyApi.CoreではなくMyApi.ClientProfileを使用するように実際に指示できます。

    強い名前の確認エラーが発生すると思います。公開鍵は同じなので....