2

ASP.NET webforms アプリケーションで Ninject 3 を使用しようとしています。必要なすべての場所に新しいインジェクション カーネルを作成することで、しばらく Ninject.Web 拡張機能なしで使用してきました。それが正しいやり方ではないということは、今まで私には思いもしませんでした。Ninject.Web を正常に使用する小さなテスト アプリケーションを作成しましたが、実際のアプリケーションで同じことを実行しようとすると、ページが読み込まれるとすぐに TypeLoadException を受け取ります。ブレークポイントを設定できるコードにも入りません。例外とスタック トレースは次のとおりです。

アセンブリ 'mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' から型 'System.Runtime.CompilerServices.ExtensionAttribute' を読み込めませんでした。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.TypeLoadException: アセンブリ 'mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' から型 'System.Runtime.CompilerServices.ExtensionAttribute' を読み込めませんでした。

ソース エラー:

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

スタックトレース:

[TypeLoadException: アセンブリ 'mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' から型 'System.Runtime.CompilerServices.ExtensionAttribute' を読み込めませんでした。]
System.ModuleHandle.ResolveType(RuntimeModule モジュール、Int32 typeToken、IntPtr * typeInstArgs、Int32 typeInstCount、IntPtr* methodInstArgs、Int32 methodInstCount、ObjectHandleOnStack タイプ) +0
System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule モジュール、Int32 typeToken、RuntimeTypeHandle[] typeInstantiationContext、RuntimeTypeHandle[] methodInstantiationContext) +525
System.ModuleHandle.ResolveTypeHandle(Int32 typeToken 、RuntimeTypeHandle[] typeInstantiationContext、RuntimeTypeHandle[] methodInstantiationContext) +19
System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) +315
System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport スコープ, Assembly& lastAptcaOkAssembly, RuntimeModule decorModule, MetadataToken decorToken, RuntimeType attributeFilterType, Boolean mustBeInheritable、Object[] 属性、IList 派生属性、RuntimeType& attributeType、IRuntimeMethodInfo& ctor、Boolean& ctorHasParameters、Boolean& isVarArg) +208
System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoredModule, Int32 decorMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes, Boolean isDecoratedTargetSecurityTransparent) +1171 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly アセンブリ, RuntimeType caType) +146
WebActivator.AssemblyExtensions .GetActivationAttributes(アセンブリ アセンブリ) +114
WebActivator.ActivationManager.RunActivationMethods() +286
WebActivator.ActivationManager.RunPreStartMethods() +38
WebActivator.ActivationManager.Run() +56

[InvalidOperationException: 型 WebActivator.ActivationManager でのアプリケーション開始前の初期化メソッド Run は、次のエラー メッセージで例外をスローしました: 型 'System.Runtime.CompilerServices.ExtensionAttribute' をアセンブリ 'mscorlib、Version=4.0.0.0、Culture から読み込めませんでした=neutral, PublicKeyToken=b77a5c561934e089'..]
System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 メソッド) +11567502
System.Web.Compilation.BuildManager.CallPreStartInitMethods() +465
System.Web.Hosting.HostingEnvironment.Initialize( ApplicationManager appManager、IApplicationHost appHost、IConfigMapPathFactory configMapPathFactory、HostingEnvironmentParameters、hostingParameters、PolicyLevel policyLevel、例外 appDomainCreationException) +1167

[HttpException (0x80004005): 型 WebActivator.ActivationManager で実行されるアプリケーション前の開始初期化メソッドは、次のエラー メッセージで例外をスローしました: 型 'System.Runtime.CompilerServices.ExtensionAttribute' をアセンブリ 'mscorlib、バージョン = 4.0 から読み込めませんでした。 0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089'..]
System.Web.HttpRuntime.FirstRequestInit(HttpContext コンテキスト) +11556592 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext コンテキスト) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr、 HttpContext コンテキスト) +4813333

私の検索では、それほど役立つものは見つかりませんでしたが、私が調査した主な方法は、Ninject が構築された .NET のバージョンと実際に実行しているバージョンとの間の潜在的な競合です。システムに .NET 4.5 をインストールしたことがないので、4.0 に対してビルドしていることは確かです。次に、最新バージョンの Ninject (3.0.2) とソースからの拡張機能をビルドして、4.0 も使用していることを確認しました。また、実際のアプリで使用しているすべてのライブラリをテスト アプリに追加して、競合があるかどうかを確認しようとしましたが、何も起こりませんでした。(ただし、それらを実行するコードを入れるところまでは行きませんでした。それによって何かが変わるかどうかはわかりません。)

誰かがこの種の問題を見たことがありますか、または私が試すことができるアイデアはありますか? 私が提供できる役立つ情報は他にありますか?

あるいは、ninject.web 拡張機能の代わりに、ASP.NET アプリケーションで Ninject を使用できる他の方法はありますか? Ninject カーネルをシングルトンにラップしても同じように動作しますか?

4

0 に答える 0