一見一般的なエラーが発生しています
Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
.Net 4.0 に対してコンパイルする必要があるが、Windows Server 2012 (.Net 4.5 を使用) を実行しているビルド サーバー上にビルドされているプロジェクト。このプロジェクトは、.Net 4.5 をインストールするオプションがない 2003 を実行している Web サーバーにデプロイされる Web アプリケーションです。そこでは、「クラシック」.Net 4.0に対して実行されます
同様の質問から、MSBuild のコマンド ライン オプションを試しています。
/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
の組み合わせも色々試してみました
/property:ReferencePath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/property:NoStdLib=true
/property:NoCompilerStandardLib=true
参照アセンブリ (.dll ファイルを含む) は、実際にはビルド サーバー上のその場所にインストールされます。しかし、Web サイトをデプロイしてホームページにアクセスすると、そのエラーが発生します。(興味深いことに、ページをリロードすると、エラーは消え、サイトは正常に動作します。) .Net 4.0 アセンブリに対してコンパイルするために必要な MSBuild パラメーターは何ですか?
更新 MSBuild でばかげたレベルのログ記録を有効にしましたが、どうやら .Net 4.0 参照アセンブリに対してビルドしているようです。
Resolved file path is "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
また、そのフォルダーまたはビルド サーバーの作業ディレクトリの外にあるアセンブリについての言及は見られませんでした。したがって、適切にコンパイルされているように見えますが、Web サーバーにデプロイすると例外がスローされます。
ページのリロード時に例外が消えることに関しては、それがマークアップのプリコンパイル手順に関連しているのかどうか疑問に思います。ビルド サーバーで aspnet_compile を実行しています。おそらく、生成されたアセンブリから例外が発生した場合、Web サーバーはそれを再コンパイルします。再コンパイルされたアセンブリは、真の .Net 4.0 で作成されているため問題ありません。