2013-04-18 22 views
6

私のプロジェクトは.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を対象としたプロジェクトでは動作しないようです。

私はこれがロングショットであることを知っています。しかし、それがとても近かったので誰か他のアイデアを持っているかどうかを見たいだけです。

ありがとうございました。

答えて

14

一般に、これは機能しません。場合によってはが動作しますが、4.5は4.0の代わりになっているので、ですが、一般的には動作しません。私は個人的に、さまざまなアセンブリに移動した型に関する問題を見てきました。見た目と同じように、バインディングは正しく設定されていません。リフレクションタイプは、4.5で移動された唯一のタイプではありません。

私のプロジェクトは.NET 4.5を対象としています。新しい4.5メソッドは使用しないので、実際には.NET 4.0のみがインストールされたマシンで正常に動作します。

この場合、アプリケーションを.NET 4.0のターゲットに変更することができます。これにより、.NET 4のみがインストールされたマシンで安全に実行できるようになります。

+0

残念ながら、私のプロジェクトは、.NET 4.5をターゲットとする他の一般的なプロジェクトも参照しています。 VS2012は私のプロジェクトを4.0に変更することはできません(VS2012を騙す方法がない限り)。 – Hengyi

+2

@Ian 4.5をターゲットにして4.5をデプロイするか、それらのプロジェクトを変更する必要があります。彼らが4.5をターゲットにしている場合は、新しい機能を使用する可能性が高いため、4.5が必要になります... –

関連する問題