9

NinjectModuleに次のコード行があります。

Bind<IValidatorFactory>().To<NinjectValidatorFactory>().InSingletonScope();

これは以前は正常に機能していましたが、Nugetで一連の更新を行った後、次のエラーが発生します。

エラー3タイプ'Ninject.Web.Mvc.FluentValidation.NinjectValidatorFactory'は、ジェネリック型またはメソッド'Ninject.Syntax.IBindingToSyntax.To()'のタイプパラメーター'TImplementation'として使用できません。'Ninject.Web.Mvc.FluentValidation.NinjectValidatorFactory'から'FluentValidation.IValidatorFactory'への暗黙の参照変換はありません。D:\ Projects \ Current ... \ Configuration \ MainModule.cs 19 13

エラー4タイプ'FluentValidation.ValidatorFactoryBase'が、参照されていないアセンブリで定義されています。アセンブリ'FluentValidation、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=a82054b837897c66'への参照を追加する必要があります。D:\ Projects \ Current ... \ Configuration \ MainModule.cs 19 13

FluentValidation Version = 2.0.0.0への参照がないのは事実ですが、FluentValidation Version=3.4.0.0への参照はあります。

メタデータによると...

  • IValidatorFactoryおよびValidatorFactoryBaseAssemblyFluentValidation.dllで定義されています。
  • NinjectValidatorFactoryAssemblyNinject.Web.Mvc.FluentValidation.dllで定義されています。

Referencesフォルダーには、FluentValidationv3.4.0.0とNinject.Web.Mvc.FluentValidationv3.0.0.0があります。

コンパイラがFluentValidationVersion=2.0.0.0が必要だと考える理由がわかりません。

私は何か間違ったことをしていますか、それともこれはNugetパッケージの問題ですか?

4

2 に答える 2

11

問題は、FluentValidationが以前は署名されたアセンブリでしたが、現在は署名されていないアセンブリになっていることのように見えます。ただし、Ninject.Web.Mvc.FluentValidationは、FluentValidationが署名されていると見なします。

ILSpyでこれら2つのアセンブリを見ると、次のことに気付くでしょう。

  • Ninject.Web.Mvc.FluentValidationは、次の属性を持つFluentValidationを参照します:FluentValidation、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = a82054b837897c66
  • ただし、FluentValidationの最新バージョンには、異なる属性があります。FluentValidation、Version = 3.4.0.0、Culture = neutral、PublicKeyToken = null

PublicKeyTokenがnull(符号なし)に変更されていることに注意してください。

うまくいけば、これはすぐに修正されるでしょう。一方、オプションは、以前のFluentValidationにロールバックするか、新しいフォークを介して参照を修正することです。

アップデート

バグレポートをNinject.Web.Mvc.FluentValidationに投稿しました。うまくいけば、これにより問題が迅速に解決されることが保証されます。

アップデート2

誰かがそれを見逃した場合に備えて、以下の@dismissileからのコメントには良い解決策が含まれています。私はそれを試してみました、そしてそれはほとんどうまくいきます。詳細を示すわずかなバリエーションを次に示します。

  1. 「FluentValidation」を含むすべてのNugetパッケージを削除します。
  2. Nugetを使用してFluentValidation-Signedをインストールします。
  3. Nugetを使用してFluentValidation.MVC3-Signed(またはMVC4-Signed)をインストールします
  4. パッケージマネージャーコンソールを使用して、次のように入力します。

    Install-Package Ninject.Web.Mvc.FluentValidation -IgnoreDependencies
    

注:Web.configにバインディングリダイレクトを手動で追加する必要はありませんでした(ただし、Nugetパッケージによって自動的に追加されました)。

于 2012-08-18T08:40:30.193 に答える
2

問題はDanMによって正しく識別されます。これがプロジェクトコーディネーターからのコメントです

「今後、プライマリnugetパッケージに厳密な名前が付けられることはなくなります。

絶対に強い命名が必要な場合は、別のパッケージであるFluentValidation-signedを使用できますが、署名されていないバージョンを使用することをお勧めします。」Jeremy Skinner

于 2012-08-19T14:49:40.427 に答える