この回答を投稿するのをためらっています。実際には技術的に可能ですが、実際にはうまく機能しません。CLR とコア フレームワーク アセンブリのバージョン番号は、4.5 では変更されていません。CLR の v4.0.30319 を引き続き対象とし、フレームワーク アセンブリのバージョン番号は 4.0.0.0 のままです。アセンブリ マニフェストを ildasm.exe のような逆アセンブラーで見たときの唯一の特徴は、4.5 が必要であり、変更する必要があることを示す [TargetFramework] 属性の存在です。実際にはそれほど簡単ではありませんが、コンパイラによって発行されます。
最大の違いは目に見えないことです。Microsoft は、アセンブリの実行可能ヘッダーに長い間待ち望まれていた変更を加えました。実行可能ファイルが互換性のある Windows のバージョンを指定します。XP は、Windows 2000 で始まった前世代の Windows に属します。メジャー バージョン番号は 5 です。Vista は現在の世代の始まりであり、メジャー バージョン番号は 6 です。
.NET コンパイラは常に最小バージョン番号を Windows NT および Windows 9x のバージョンである 4.00 に指定しています。これは、アセンブリで dumpbin.exe /headers を実行すると確認できます。サンプル出力は次のようになります。
OPTIONAL HEADER VALUES
10B magic # (PE32)
...
4.00 operating system version
0.00 image version
4.00 subsystem version // <=== here!!
0 Win32 version
...
.NET 4.5 の新機能は、コンパイラがそのサブシステムのバージョンを 6.00 に変更することです。大部分は、Windows がその数に注意を払い、それが十分に小さいかどうかを確認するだけでなく、期限切れになった変更です。また、プログラムが古いバージョンの Windows で動作するように作成されていることを前提としているため、appcompat 機能もオンになります。これらの機能は問題を引き起こします。特に、Aero のウィンドウのサイズについて Windows が嘘をつく方法は厄介です。プログラムが Aero を備えた Windows バージョンで実行するように設計されていることがわかると、Aero ウィンドウの太い境界線について嘘をつくのをやめます。
/subsystem オプションを使用してアセンブリで Editbin.exe を実行すると、そのバージョン番号を変更して 4.00 に戻すことができます。 この回答は、ビルド後のイベントのサンプルを示しています。
ただし、良いニュースはここまでです。重大な問題は、.NET 4.5 が .NET 4.0 とあまり互換性がないことです。最大の問題は、クラスがあるアセンブリから別のアセンブリに移動したことです。最も顕著なのは、[Extension] 属性で発生したことです。以前は System.Core.dll にありましたが、.NET 4.5 では Mscorlib.dll に移動されました。独自の拡張メソッドを宣言する場合、XP ではこれが問題になります。プログラムは、System.Core 参照アセンブリの .NET 4.5 バージョンの [TypeForwardedTo] 属性によって有効にされる属性を Mscorlib で検索するように指示します。しかし、.NET 4.0 でプログラムを実行すると、そこにはありません。
もちろん、.NET 4.5 でしか利用できないクラスやメソッドの使用をやめるのに役立つものは何もありません。これを行うと、4.0 で実行すると、プログラムは TypeLoadException または MissingMethodException で失敗します。
4.0 をターゲットにするだけで、これらの問題はすべて解消されます。または、行き詰まりを打破して XP のサポートをやめるというビジネス上の決定は、プログラマーが下すことはあまりありませんが、XP が引き起こしている問題を指摘することで確実に奨励することができます。もちろん、古いオペレーティング システムをサポートしなければならないことにはゼロではないコストがかかりますが、テストの労力だけでも相当なものです。経営陣によって認識されることの少ないコストである Windows の互換性は、経営陣に指摘されない限り、伝説的なものです。そのコストをクライアントに回せば、クライアントは正しい決定をより迅速に下す傾向があります:) しかし、私たちはそれについてあなたを助けることはできません.