1

アプリケーション MyApplication によって消費される API MyApi があります。

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

  • MyApi.Core
  • MyApi.ドメイン
  • MyApi.プロバイダー

(およびその他)

展開を簡単にするために、これらは ILMerged に組み込まれています

  • MyApi.ClientProfile

すべての MyApis dll には厳密な名前が付けられています。

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

現在、いくつかの Web 機能を MyApi に追加しているため、.NET 4.0 拡張プロファイルをターゲットとする 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.ClientProfile のみが存在するため)、MyApi.Web はロードに失敗します。

アセンブリ解決イベントを処理できず、MyApi.Core/MyApi.Domain の要求を MyApi.ClientProfile にリダイレクトできません。これは、MyApi アセンブリがすべて厳密な名前であり、失敗するためです。

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

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

MyApplication.Web にその構成で bypassTrustedAppStrongNames を指定するように強制したくありません (MyApi.Web から何らかの方法でこの設定を直接有効にすることは、受け入れられるオプションかもしれません....)。

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

助言がありますか?

ありがとう。

4

1 に答える 1

0

私は気づきました:

アセンブリに同じ公開鍵トークンがある場合は、リダイレクトを実行でき、名前は関係ありません。

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

強力な名前検証エラーが発生すると思いました。公開鍵が同じであるため、そうではありません。

于 2011-08-23T04:59:02.590 に答える