diff --git a/src/Compilers/Core/MSBuildTask/Csc.cs b/src/Compilers/Core/MSBuildTask/Csc.cs index f5d54196a15f9385a1ff7ede7b2e4c635bdf2012..823e2f024c5c11ab835830a2d759c5a2bd1fba32 100644 --- a/src/Compilers/Core/MSBuildTask/Csc.cs +++ b/src/Compilers/Core/MSBuildTask/Csc.cs @@ -143,6 +143,12 @@ public string WarningsNotAsErrors get { return (string)_store[nameof(WarningsNotAsErrors)]; } } + public bool NullableReferenceTypes + { + set { _store[nameof(NullableReferenceTypes)] = value; } + get { return (bool)_store[nameof(NullableReferenceTypes)]; } + } + #endregion #region Tool Members @@ -198,6 +204,7 @@ protected internal override void AddResponseFileCommands(CommandLineBuilderExten commandLine.AppendWhenTrue("/errorendlocation", _store, nameof(ErrorEndLocation)); commandLine.AppendSwitchIfNotNull("/preferreduilang:", PreferredUILang); commandLine.AppendPlusOrMinusSwitch("/highentropyva", _store, nameof(HighEntropyVA)); + commandLine.AppendPlusOrMinusSwitch("/nullable", _store, nameof(NullableReferenceTypes)); // If not design time build and the globalSessionGuid property was set then add a -globalsessionguid: bool designTime = false; diff --git a/src/Compilers/Core/MSBuildTask/Microsoft.CSharp.Core.targets b/src/Compilers/Core/MSBuildTask/Microsoft.CSharp.Core.targets index cc0ad1ea4bbc71500277eeeaab7a8f964aa83a86..fe1bf6090da8798d6cd609f39623907d63adbfea 100644 --- a/src/Compilers/Core/MSBuildTask/Microsoft.CSharp.Core.targets +++ b/src/Compilers/Core/MSBuildTask/Microsoft.CSharp.Core.targets @@ -88,6 +88,7 @@ NoLogo="$(NoLogo)" NoStandardLib="$(NoCompilerStandardLib)" NoWin32Manifest="$(NoWin32Manifest)" + NullableReferenceTypes="$(NullableReferenceTypes)" Optimize="$(Optimize)" Deterministic="$(Deterministic)" PublicSign="$(PublicSign)" diff --git a/src/Compilers/Core/MSBuildTaskTests/CscTests.cs b/src/Compilers/Core/MSBuildTaskTests/CscTests.cs index 5048123ecfb718afc09898146f9bc352046a2c98..6e4c9ca70f535d2c91ed45ec1836a6dabb71b0a3 100644 --- a/src/Compilers/Core/MSBuildTaskTests/CscTests.cs +++ b/src/Compilers/Core/MSBuildTaskTests/CscTests.cs @@ -332,6 +332,24 @@ public void RefOnly() Assert.Equal("/out:test.exe /refonly test.cs", csc.GenerateResponseFileContents()); } + [Fact] + public void NullableReferenceTypes_True() + { + var csc = new Csc(); + csc.Sources = MSBuildUtil.CreateTaskItems("test.cs"); + csc.NullableReferenceTypes = true; + Assert.Equal("/nullable+ /out:test.exe test.cs", csc.GenerateResponseFileContents()); + } + + [Fact] + public void NullableReferenceTypes_False() + { + var csc = new Csc(); + csc.Sources = MSBuildUtil.CreateTaskItems("test.cs"); + csc.NullableReferenceTypes = false; + Assert.Equal("/nullable- /out:test.exe test.cs", csc.GenerateResponseFileContents()); + } + [Fact] public void SharedCompilationId() {