前回の記事では、Windows Server 2008 の IIS 7 では、バージョンの異なる .NET Framework ランタイムをアプリケーションプール単位で混在させることができることを紹介した。
今回は、複数のバージョンの異なる ASP.NET アプリケーションをホストする際の注意点を説明する。
一つのサイトに複数のバージョンを混在させると、以下のようなメッセージが出力され、エラーが発生する場合がある。
ファイルまたはアセンブリ 'Masudaq.Library.Net'、またはその依存関係の 1
つが読み込めませんでした。このアセンブリは現在読み込まれているランタイムより新しいランタイムでビルドされているため、読み込むことができません。
スタック トレース:
[BadImageFormatException: ファイルまたはアセンブリ 'Masudaq.Library.Net'、またはその依存関係の 1
つが読み込めませんでした。このアセンブリは現在読み込まれているランタイムより新しいランタイムでビルドされているため、読み込むことができません。]
System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence
assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean
throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence
assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +416
System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence
assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +166
System.Reflection.Assembly.Load(String assemblyString) +35
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String
assemblyName, Boolean starDirective) +190
[ConfigurationErrorsException: ファイルまたはアセンブリ 'Masudaq.Library.Net'、またはその依存関係の 1
つが読み込めませんでした。このアセンブリは現在読み込まれているランタイムより新しいランタイムでビルドされているため、読み込むことができません。]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String
assemblyName, Boolean starDirective) +11203480
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
+388
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +232
System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +48
System.Web.Compilation.CompilationUtil.GetTypeFromAssemblies(AssemblyCollection
assembliesCollection,
String typeName, Boolean ignoreCase) +166
System.Web.Compilation.BuildManager.GetType(String typeName, Boolean
throwOnError, Boolean ignoreCase) +362
System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type) +23
System.Web.Configuration.HandlerFactoryCache..ctor(String type) +25
System.Web.HttpApplication.GetFactory(String type) +91
System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+338
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&
completedSynchronously) +263
これは、ASP.NET アプリケーションをネストし、上位の ASP.NET アプリケーションが、下位より、古いバージョンの .NET Framework を用いたアプリケーションプールを設定した際に発生する。
以下のサイトにも説明があるが、古いバージョンの .NET Framework には、上位互換がないため、上位の古いバージョンの Web.config を継承することにより発生してしまう障害である。
方法: ASP.NET Web アプリケーションを ASP.NET 4 にアップグレードする
もちろん、逆の場合、つまり、新しいバージョンが上位にネストされている場合では、新しいバージョンの .NET Framework は、下位互換があるため、このようなエラーは発生しない。
運用環境においては、複数のバージョンのを混在させたい積極的な理由がない場合は、同一バージョンに統一することが望ましいだろう。
コメント (0)
コメントの投稿