私はC#6.0を使ってサンプルプロジェクトを作成しました - 例としてnull伝播とプロパティの初期化、set target version .NET 4.0そしてそれはうまくいきます。
public class Cat
{
public int TailLength { get; set; } = 4;
public Cat Friend { get; set; }
public string Mew() { return "Mew!"; }
}
class Program
{
static void Main(string[] args)
{
var cat = new Cat {Friend = new Cat()};
Console.WriteLine(cat?.Friend.Mew());
Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
}
}
.NET 4.0をターゲットとするソフトウェアでC#6.0の機能を使用できるという意味ですか?制限や欠点はありますか?
はい(ほとんど) C#6.0には新しいRoslynコンパイラが必要ですが、新しいコンパイラは古いフレームワークバージョンをターゲットにしてコンパイルできます。それは新しい機能だけに限られていますフレームワークからのサポートを必要としない。
たとえば、C#6.0の以前のバージョンの.Netでは文字列補間機能を使用できますが、string.Format
):
int i = 3;
string s = $"{i}";
それを使用するには、.NET 4.6が必要です。IFormattable
新しいフレームワークバージョンのみが追加されSystem.FormattableString
:
int i = 3;
IFormattable s = $"{i}";
あなたが言及したケースは動作するためにフレームワークからの型を必要としません。そのため、コンパイラは、古いフレームワークバージョンのこれらの機能を完全にサポートできます。
IFormattable
文字列補間 - i3arnon
ウィキペディアや他のリンクを理解する方法に集中したいだけです。
C#6.0が.NET Framework 4.6に対応しているとWikipediaが言っている場合、それは単に製品版のコンパイラ(msc.exe)が.NET Framework 4.6リリースに含まれることを意味します。経由マルチターゲティングそのようなコンパイラは、.NET Frameworkリリースの下位バージョンをサポートできます。もちろん、Roslynはオープンソースプロジェクトになったので、コンパイラは完全に個別のコンポーネントになりました。
CLRバージョンの4.0.30319(.0)を参照する場合、実際には.NET Framework 4 *(4.0、4.0。*、4.5、4.5。*、4.6、4.6。*)になります。 CLRバージョン4の仕様Xamarin / Monoも同じCLR仕様を実装していることは言うまでもありません。
MSDNページはまだ完全には更新されていませんが、あるページ.NET Framework 4.6は、バージョン情報に記載されています。
全体として、言語仕様(およびC#コンパイラ)、CLR仕様、および.NET Frameworkリリースは、互いに密接に関連していません。それは、古いCLRと.NET Frameworkをターゲットにするために新しいコンパイラを利用するのに十分な柔軟性を開発者に与えます。
はい、古いフレームワーク用に新しいコンパイラを使用して、新しいコンパイラ機能にアクセスすることができます(それらの機能が.NET 4.6で導入された新しい型を必要としない限り)。
この他の例は、C#4.0(.NET 4.0)で導入されたデフォルトパラメータを持つメソッドですが、.NET 2.0(C#2.0)および.NET 3.5(C#3.0)プロジェクトでそれらを使用することができます。
.NET 2.0または.NET 3.0でも拡張メソッド(C#3.0で導入)を使用することができます。あなたが1つの小さな回避策をするならばコンパイラを幸せにするために、.NET 3.5で導入された属性を見つけることができます。
あなたがビルディングスクリプトを使用している場合、新しいビルダーへのパスを変更することを忘れないでください:
CPATH = C:\ Program Files(x86)\ MSBuild \ 14.0 \ Binに設定します。
[Rebuild.bat]
set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin
call nuget_restore.bat
"%CPATH%\msbuild" YourSolution.sln /t:Rebuild /p:Configuration=Release /fileLogger /flp:logfile=JustErrors.log;errorsonly /verbosity:minimal
if %errorlevel% neq 0 goto ERROR
REM call deploy Release //Things like deploy files..
goto END
:ERROR
echo ERROR: %errorlevel%
pause
:END
@oobeによる回答は実際に重要です。を使用した後にのみ、バッチファイルを使用してソリューションを構築できました。MSBuild.exeからC:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin。