この質問にはすでに答えがあります。
私は古いバージョンの.NET Framework(.NET 4.5.2)をターゲットとするプロジェクトを持っています。私はVisual Studio 2015(そして私のマシンには.NET 4.6)をインストールしました。 .NET 4.6 / C#6でリリースされたC#言語機能を使用しても、コンパイルは完了することに気付きました。私のプロジェクトのターゲットフレームワークが<の場合.NET 4.6では、これはコンパイルできません。
public string MyExpressionBodyProperty => "1";
//auto properties are new in C# 6
public string MyAutoProperty { get; } = "1";
private static void MethodThatUsesNameOf(string filename)
{
if (filename == null)
{
//nameof was released in C# 6
throw new ArgumentException("The file does not exist.", nameof(filename));
}
}
ターゲットとしているフレームワークバージョンで動作する.NET言語機能のみを使用していることを確認する方法を教えてください。
.NET FrameworkのバージョンとC#言語のバージョンは異なります。 C#6の言語機能
public string MyAutoProperty { get; } = "1";
nameof(filename)
VS 2015によって、以前のフレームワークをターゲットとするコードにコンパイルできます。
ターゲットとしているフレームワークバージョンで動作する.NET言語機能のみを使用していることを確認する方法を教えてください。
.NET 4.6 Framework機能を使用しようとすると、以前のフレームワークをターゲットにしている場合は適切なコンパイラエラーが発生します。
.NET 4.6がインストールされていないマシンにこのコードをデプロイすることはできますか?
はい、そうです。デプロイメントマシンがVS2015でターゲットとしているものと互換性のあるフレームワークを持っている限り。
C#6の機能と.NET 4.6の機能があります。
nameof
C#6の機能であるため、新しいコンパイラで実行するだけで済みますが、それでも古い.NET Frameworkを使用できます。
.NET 4.6を必要とする機能の例は次のとおりです。
public void Foo(IReadOnlyCollection<string> input)
{
}
public void Main(string[] args)
{
Foo(new Stack<string>());
}
.NET 4.6の場合Stack
実装するIReadOnlyCollection
しかし、以前のバージョンではそうではありません。ターゲットプラットフォームとして.NET 4.5.2を選択した場合、上記のコードはコンパイルに失敗します。
async/await
なしでIAsyncStateMachine
、 例えば。 - Jon Hanna