私のプロジェクトは.NET 4.5をターゲットにしています。新しい4.5メソッドは使用しないので、実際には.NET 4.0のみがインストールされたマシンで正常に動作します。.NET 4.5でビルドされたアプリケーションは.NET 4.0でも実行できますか?
拡張メソッドとリフレクションを追加するまで、これはすべて役に立ちます。その後、4.0のマシンでこの.NET 4.5プログラムを実行すると、 "System.TypeLoadException:アセンブリ 'mscorlibから' System.Runtime.CompilerServices.ExtensionAttribute 'タイプをロードできませんでした。よく文書化されている有名なExtensionAttributeプログラムhere。
これをテストする別の簡単な方法は、次の行を追加することです。その後、.NET 4.0でのみ実行すると例外がスローされます。
Console.WriteLine(typeof(System.Runtime.CompilerServices.ExtensionAttribute).Assembly.FullName);
回避策があるかどうかは疑問です。たとえば、ILMerge(リンクに記載されている正しい/ targetplatformオプションを使用している場合)は、プロジェクトが.NET 4.0(4.5がインストールされている)をターゲットにしている場合、ExtensionAttributeを実際にmscorlibからSystem.Coreに変更します。しかし、.NET 4.5を対象としたプロジェクトでは動作しないようです。
私はこれがロングショットであることを知っています。しかし、それがとても近かったので誰か他のアイデアを持っているかどうかを見たいだけです。
ありがとうございました。
残念ながら、私のプロジェクトは、.NET 4.5をターゲットとする他の一般的なプロジェクトも参照しています。 VS2012は私のプロジェクトを4.0に変更することはできません(VS2012を騙す方法がない限り)。 – Hengyi
@Ian 4.5をターゲットにして4.5をデプロイするか、それらのプロジェクトを変更する必要があります。彼らが4.5をターゲットにしている場合は、新しい機能を使用する可能性が高いため、4.5が必要になります... –