私はこのようなシナリオを持っていた:城DynamicProxyインターセプタが異なるアセンブリに問題
私はアセンブリ内にあるクラスへの呼び出しをキャッチするためにインターセプタを使用しています(のはフィーチャーそれを呼びましょう)メインプロジェクトによって参照されます。アセンブリフィーチャはNuGetによってインストールされます(これはpublicではなく、内部のものです)、別のアセンブリへの参照を持ちます(コアと呼ぶ)。主なプロジェクトはアセンブリコアを参照しています。コアには、インターセプトされたメソッドの1つの引数型として使用されるクラス定義が含まれます。
メインプロジェクトと機能が同じバージョンのコアライブラリを参照している限り、すべて正常に動作します。このバージョンが異なり、インターセプトされたメソッドがメソッド引数としてCoreの型を使用すると、問題が発生します。この状況で
は、例外が状態A strongly-named assembly is required.
というスローされます。
はコア0.2.2.30のバージョンはアセンブリ機能が期待されているバージョンである
[FileLoadException: Could not load file or assembly 'Core, Version=0.2.2.30, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)]
Castle.Proxies.Invocations.IBasketService_Update.InvokeMethodOnTarget() +0
Castle.DynamicProxy.AbstractInvocation.Proceed() +116
Project.Basket.BasketServiceUpdatedInterceptor.Intercept(IInvocation invocation) in c:\(...)\Basket\BasketServiceUpdatedInterceptor.cs:20
Castle.DynamicProxy.AbstractInvocation.Proceed() +604
Castle.Proxies.IBasketServiceProxy.Update(ProductId productId, UInt16 quantity) +210 (...)
、メインプロジェクトは、例えば、バージョン0.2.2.31のために使用されます。 Castle DynamicProxyはバージョン0.2.2.30のCoreを見つけることができません。この正確なアセンブリはbinフォルダにはデプロイされていないため、そうです。
異なるバージョンのコアは、このシナリオでは完全に正常な状況です。フィーチャアセンブリでは、指定したバージョンよりも高いバージョンが必要です。正確なバージョンではありません。
DynamicProxyのアセンブリの期待値がそれほど厳しくないかどうかはわかりませんが、この制限を受け入れる必要があります。私はこの問題を克服するためにシンプルなプロキシクラスを作成しましたので、私をもうブロックしないで、私たちのソリューションでDynamicProxyを使用できなくなってしまいました。
Castle.Windsor(DynamicProxyを使用する)で使用する場合とまったく同じ問題があります。したがって、署名されていないアセンブリを生成する機会はありません。今何をすべきか手がかり? –
それを見つけました:) windsorContainer.Kernel.ProxyFactory = new DefaultProxyFactory(disableSignedModule:true); –