未验证 提交 12f1b8f6 编写于 作者: C Chris Sienkiewicz 提交者: GitHub

LangVersion 9 (#44911)

* Introduce LanguageVersion.CSharp9
* Limit netcoreapp3.0, 3.1 and netstdard 2.1 to C# 8.0
* Map CSharp9 to language version preview
* Default to CSharp9 for netcoreapp5.0
* Add Tests
上级 915da6a5
......@@ -6250,6 +6250,9 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
<data name="ERR_AddressOfToNonFunctionPointer" xml:space="preserve">
<value>Cannot convert &amp;method group '{0}' to non-function pointer type '{1}'.</value>
</data>
<data name="ERR_FeatureNotAvailableInVersion9" xml:space="preserve">
<value>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</value>
</data>
<data name="ERR_UnexpectedArgumentList" xml:space="preserve">
<value>Unexpected argument list.</value>
</data>
......
......@@ -1740,7 +1740,7 @@ internal enum ErrorCode
#endregion diagnostics introduced for C# 8.0
#region diagnostics introduced in preview
#region diagnostics introduced in C# 9.0
ERR_InternalError = 8751,
......@@ -1818,6 +1818,7 @@ internal enum ErrorCode
ERR_AddressOfMethodGroupInExpressionTree = 8810,
ERR_CannotConvertAddressOfToDelegate = 8811,
ERR_AddressOfToNonFunctionPointer = 8812,
ERR_FeatureNotAvailableInVersion9 = 8813,
// Codes 8813, 8814, 8815, 8816 used by features/module-initializers
......@@ -1846,8 +1847,7 @@ internal enum ErrorCode
ERR_NoCopyConstructorInBaseType = 8867,
ERR_CopyConstructorMustInvokeBaseCopyConstructor = 8868,
#endregion
#endregion diagnostics introduced for C# 9.0
// Note: you will need to re-generate compiler code after adding warnings (eng\generate-compiler-code.cmd)
}
}
......@@ -128,13 +128,13 @@ public enum LanguageVersion
/// </summary>
CSharp8 = 800,
// When this value is released, update LanguageVersionExtensions in the IDE layer to point to it.
// When this value is available in the released NuGet packge, update LanguageVersionExtensions in the IDE layer to point to it.
// https://github.com/dotnet/roslyn/issues/43348
//
// /// <summary>
// /// C# language version 9.0
// /// </summary>
// CSharp9 = 900,
/// <summary>
/// C# language version 9.0
/// </summary>
CSharp9 = 900,
/// <summary>
/// The latest major supported version.
......@@ -174,6 +174,7 @@ internal static bool IsValid(this LanguageVersion value)
case LanguageVersion.CSharp7_2:
case LanguageVersion.CSharp7_3:
case LanguageVersion.CSharp8:
case LanguageVersion.CSharp9:
case LanguageVersion.Preview:
return true;
}
......@@ -207,6 +208,8 @@ internal static ErrorCode GetErrorCode(this LanguageVersion version)
return ErrorCode.ERR_FeatureNotAvailableInVersion7_3;
case LanguageVersion.CSharp8:
return ErrorCode.ERR_FeatureNotAvailableInVersion8;
case LanguageVersion.CSharp9:
return ErrorCode.ERR_FeatureNotAvailableInVersion9;
default:
throw ExceptionUtilities.UnexpectedValue(version);
}
......@@ -257,6 +260,8 @@ public static string ToDisplayString(this LanguageVersion version)
return "7.3";
case LanguageVersion.CSharp8:
return "8.0";
case LanguageVersion.CSharp9:
return "9.0";
case LanguageVersion.Default:
return "default";
case LanguageVersion.Latest:
......@@ -353,6 +358,11 @@ public static bool TryParse(string? version, out LanguageVersion result)
result = LanguageVersion.CSharp8;
return true;
case "9":
case "9.0":
result = LanguageVersion.CSharp9;
return true;
default:
result = LanguageVersion.Default;
return false;
......@@ -370,12 +380,14 @@ public static LanguageVersion MapSpecifiedToEffectiveVersion(this LanguageVersio
case LanguageVersion.Default:
case LanguageVersion.LatestMajor:
return LanguageVersion.CSharp8;
case LanguageVersion.CSharp9:
return LanguageVersion.Preview;
default:
return version;
}
}
internal static LanguageVersion CurrentVersion => LanguageVersion.CSharp8;
internal static LanguageVersion CurrentVersion => LanguageVersion.CSharp9;
/// <summary>Inference of tuple element names was added in C# 7.1</summary>
internal static bool DisallowInferredTupleElementNames(this LanguageVersion self)
......
......@@ -64,6 +64,7 @@
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.CSharp.EditorFeatures.UnitTests" />
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.EditorFeatures2.UnitTests" />
<InternalsVisibleTo Include="CompilerBenchmarks" />
<InternalsVisibleTo Include="Microsoft.Build.Tasks.CodeAnalysis.UnitTests" />
</ItemGroup>
<Import Project="..\CSharpAnalyzerDriver\CSharpAnalyzerDriver.projitems" Label="Shared" />
</Project>
......@@ -36,6 +36,7 @@ abstract Microsoft.CodeAnalysis.CSharp.Syntax.BaseObjectCreationExpressionSyntax
abstract Microsoft.CodeAnalysis.CSharp.Syntax.BaseObjectCreationExpressionSyntax.Initializer.get -> Microsoft.CodeAnalysis.CSharp.Syntax.InitializerExpressionSyntax
abstract Microsoft.CodeAnalysis.CSharp.Syntax.BaseObjectCreationExpressionSyntax.NewKeyword.get -> Microsoft.CodeAnalysis.SyntaxToken
Microsoft.CodeAnalysis.CSharp.CSharpGeneratorDriver
Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp9 = 900 -> Microsoft.CodeAnalysis.CSharp.LanguageVersion
Microsoft.CodeAnalysis.CSharp.CSharpGeneratorDriver.CSharpGeneratorDriver(Microsoft.CodeAnalysis.ParseOptions parseOptions, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.ISourceGenerator> generators, Microsoft.CodeAnalysis.Diagnostics.AnalyzerConfigOptionsProvider optionsProvider, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.AdditionalText> additionalTexts) -> void
Microsoft.CodeAnalysis.CSharp.Syntax.FunctionPointerTypeSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.FunctionPointerTypeSyntax.AddParameters(params Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax[] items) -> Microsoft.CodeAnalysis.CSharp.Syntax.FunctionPointerTypeSyntax
......
......@@ -342,6 +342,11 @@
<target state="translated">Funkce {0} není v C# 8.0 dostupná. Použijte prosím jazykovou verzi {1} nebo větší.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">Událost podobná poli {0} nemůže mít modifikátor readonly.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">Das Feature "{0}" ist in C# 8.0 nicht verfügbar. Verwenden Sie Sprachversion {1} oder höher.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">Ein feldähnliches Ereignis "{0}" darf nicht "readonly" sein.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">La característica "{0}" no está disponible en C# 8.0. Use la versión {1} del lenguaje o una posterior.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">El evento de tipo campo "{0}" no puede ser "readonly".</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">La fonctionnalité '{0}' n'est pas disponible en C# 8.0. Utilisez la version de langage {1} ou une version ultérieure.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">L'événement de type champ '{0}' ne peut pas être 'readonly'.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">La funzionalità '{0}' non è disponibile in C# 8.0. Usare la versione {1} o versioni successive del linguaggio.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">L'evento simile a campo '{0}' non può essere 'readonly'.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">機能 '{0}' は C# 8.0 では使用できません。言語バージョン {1} 以上を使用してください。</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">フィールドに類似したイベント '{0}' を 'readonly' にすることはできません。</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">'{0}' 기능은 C# 8.0에서 사용할 수 없습니다. 언어 버전 {1} 이상을 사용하세요.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">필드와 유사한 이벤트 '{0}'이(가) 'readonly'일 수 없습니다.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">Funkcja „{0}” nie jest dostępna w języku C# 8.0. Użyj języka w wersji {1} lub nowszej.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">Zdarzenie-pole „{0}” nie może być zadeklarowane jako „readonly”.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">O recurso '{0}' não está disponível em C# 8.0. Use a versão de linguagem {1} ou superior.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">O evento '{0}' semelhante ao de campo não pode ser 'readonly'.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">Функция "{0}" недоступна в C# 8.0. Используйте версию языка {1} или более позднюю.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">Подобное полю событие "{0}" не может быть readonly.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">'{0}' özelliği C# 8.0'da kullanılamaz. Lütfen {1} veya daha yüksek bir dil sürümü kullanın.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">Alan benzeri '{0}' olayı 'readonly' olamaz.</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">功能“{0}”在 C# 8.0 中不可用。请使用语言版本 {1} 或更高版本。</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">类似字段的事件 "{0}" 不能为 "readonly"。</target>
......
......@@ -342,6 +342,11 @@
<target state="translated">C# 8.0 中無法使用功能 '{0}'。請使用 {1} 或更新的語言版本。</target>
<note />
</trans-unit>
<trans-unit id="ERR_FeatureNotAvailableInVersion9">
<source>Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</source>
<target state="new">Feature '{0}' is not available in C# 9.0. Please use language version {1} or greater.</target>
<note />
</trans-unit>
<trans-unit id="ERR_FieldLikeEventCantBeReadOnly">
<source>Field-like event '{0}' cannot be 'readonly'.</source>
<target state="translated">類似欄位的事件 '{0}' 不能是 'readonly'。</target>
......
......@@ -1599,7 +1599,7 @@ public void LangVersion_NoValueSpecified()
[InlineData("iso-3")]
[InlineData("iso1")]
[InlineData("8.1")]
[InlineData("9")]
[InlineData("10")]
[InlineData("1000")]
public void LangVersion_BadVersion(string value)
{
......@@ -1614,6 +1614,8 @@ public void LangVersion_BadVersion(string value)
[InlineData("05")]
[InlineData("07")]
[InlineData("07.1")]
[InlineData("08")]
[InlineData("09")]
public void LangVersion_LeadingZeroes(string value)
{
DefaultParse(new[] { $"/langversion:{value}", "a.cs" }, WorkingDirectory).Errors.Verify(
......@@ -1652,7 +1654,7 @@ public void LanguageVersionAdded_Canary()
// - update the "UpgradeProject" codefixer
// - update the IDE drop-down for selecting Language Version (in project-systems repo)
// - update all the tests that call this canary
AssertEx.SetEqual(new[] { "default", "1", "2", "3", "4", "5", "6", "7.0", "7.1", "7.2", "7.3", "8.0", "latest", "latestmajor", "preview" },
AssertEx.SetEqual(new[] { "default", "1", "2", "3", "4", "5", "6", "7.0", "7.1", "7.2", "7.3", "8.0", "9.0", "latest", "latestmajor", "preview" },
Enum.GetValues(typeof(LanguageVersion)).Cast<LanguageVersion>().Select(v => v.ToDisplayString()));
// For minor versions and new major versions, the format should be "x.y", such as "7.1"
}
......@@ -1683,6 +1685,7 @@ public void LanguageVersion_GetErrorCode()
ErrorCode.ERR_FeatureNotAvailableInVersion7_2,
ErrorCode.ERR_FeatureNotAvailableInVersion7_3,
ErrorCode.ERR_FeatureNotAvailableInVersion8,
ErrorCode.ERR_FeatureNotAvailableInVersion9,
};
AssertEx.SetEqual(versions, errorCodes);
......@@ -1706,7 +1709,7 @@ public void LanguageVersion_GetErrorCode()
InlineData(LanguageVersion.CSharp8, LanguageVersion.LatestMajor),
InlineData(LanguageVersion.CSharp8, LanguageVersion.Latest),
InlineData(LanguageVersion.CSharp8, LanguageVersion.Default),
InlineData(LanguageVersion.Preview, LanguageVersion.Preview),
InlineData(LanguageVersion.Preview, LanguageVersion.CSharp9),
]
public void LanguageVersion_MapSpecifiedToEffectiveVersion(LanguageVersion expectedMappedVersion, LanguageVersion input)
{
......@@ -1742,6 +1745,8 @@ public void LanguageVersion_MapSpecifiedToEffectiveVersion(LanguageVersion expec
InlineData("7.3", true, LanguageVersion.CSharp7_3),
InlineData("8", true, LanguageVersion.CSharp8),
InlineData("8.0", true, LanguageVersion.CSharp8),
InlineData("9", true, LanguageVersion.CSharp9),
InlineData("9.0", true, LanguageVersion.CSharp9),
InlineData("08", false, LanguageVersion.Default),
InlineData("07.1", false, LanguageVersion.Default),
InlineData("default", true, LanguageVersion.Default),
......
......@@ -3,10 +3,21 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="Microsoft.Managed.Core.targets"/>
<PropertyGroup Condition="('$(TargetFrameworkIdentifier)' != '.NETCoreApp' OR '$(_TargetFrameworkVersionWithoutV)' &lt; '3.0') AND
('$(TargetFrameworkIdentifier)' != '.NETStandard' OR '$(_TargetFrameworkVersionWithoutV)' &lt; '2.1')">
<MaxSupportedLangVersion Condition="'$(MaxSupportedLangVersion)' == ''">7.3</MaxSupportedLangVersion>
<LangVersion Condition="'$(LangVersion)' == ''">$(MaxSupportedLangVersion)</LangVersion>
<PropertyGroup>
<!-- .NETCoreApp < 3.0, .NETStandard < 2.1, or any other target framework -->
<_MaxSupportedLangVersion Condition="('$(TargetFrameworkIdentifier)' != '.NETCoreApp' OR '$(_TargetFrameworkVersionWithoutV)' &lt; '3.0') AND
('$(TargetFrameworkIdentifier)' != '.NETStandard' OR '$(_TargetFrameworkVersionWithoutV)' &lt; '2.1')">7.3</_MaxSupportedLangVersion>
<!-- .NETCoreApp < 5.0, .NETStandard == 2.1 -->
<_MaxSupportedLangVersion Condition="(('$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(_TargetFrameworkVersionWithoutV)' &lt; '5.0') OR
('$(TargetFrameworkIdentifier)' == '.NETStandard' AND '$(_TargetFrameworkVersionWithoutV)' == '2.1')) AND
'$(_MaxSupportedLangVersion)' == ''">8.0</_MaxSupportedLangVersion>
<!-- .NETCoreApp == 5.0 -->
<_MaxSupportedLangVersion Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(_TargetFrameworkVersionWithoutV)' == '5.0' AND
'$(_MaxSupportedLangVersion)' == ''">9.0</_MaxSupportedLangVersion>
<LangVersion Condition="'$(LangVersion)' == '' AND '$(_MaxSupportedLangVersion)' != ''">$(_MaxSupportedLangVersion)</LangVersion>
</PropertyGroup>
<Target Name="CoreCompile"
......
......@@ -390,6 +390,76 @@ public void GenerateEditorConfigCoreHandlesMalformedCompilerVisibleItemMetadata(
Assert.Equal("", metaName.EvaluatedValue);
}
[Theory]
[InlineData(".NETFramework", "4.5", "7.3")]
[InlineData(".NETFramework", "4.7.2", "7.3")]
[InlineData(".NETFramework", "4.8", "7.3")]
[InlineData(".NETCoreApp", "1.0", "7.3")]
[InlineData(".NETCoreApp", "2.0", "7.3")]
[InlineData(".NETCoreApp", "2.1", "7.3")]
[InlineData(".NETCoreApp", "3.0", "8.0")]
[InlineData(".NETCoreApp", "3.1", "8.0")]
[InlineData(".NETCoreApp", "5.0", "9.0")]
[InlineData(".NETCoreApp", "6.0", "")]
[InlineData(".NETStandard", "1.0", "7.3")]
[InlineData(".NETStandard", "1.5", "7.3")]
[InlineData(".NETStandard", "2.0", "7.3")]
[InlineData(".NETStandard", "2.1", "8.0")]
[InlineData("UnknownTFM", "0.0", "7.3")]
[InlineData("UnknownTFM", "5.0", "7.3")]
public void LanguageVersionGivenTargetFramework(string tfi, string tfv, string expectedVersion)
{
XmlReader xmlReader = XmlReader.Create(new StringReader($@"
<Project>
<PropertyGroup>
<TargetFrameworkIdentifier>{tfi}</TargetFrameworkIdentifier>
<_TargetFrameworkVersionWithoutV>{tfv}</_TargetFrameworkVersionWithoutV>
</PropertyGroup>
<Import Project=""Microsoft.CSharp.Core.targets"" />
</Project>
"));
var instance = CreateProjectInstance(xmlReader);
instance.Build(GetTestLoggers());
var langVersion = instance.GetPropertyValue("LangVersion");
var maxLangVersion = instance.GetPropertyValue("_MaxSupportedLangVersion");
Assert.Equal(expectedVersion, langVersion);
Assert.Equal(expectedVersion, maxLangVersion);
// This will fail whenever the current language version is updated.
// Ensure you update the target files to select the correct CSharp version for the newest target framework
// and add to the theory data above to cover it, before changing this version to make the test pass again.
Assert.Equal(CSharp.LanguageVersion.CSharp9, CSharp.LanguageVersionFacts.CurrentVersion);
}
[Fact]
public void ExplicitLangVersion()
{
XmlReader xmlReader = XmlReader.Create(new StringReader($@"
<Project>
<PropertyGroup>
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<_TargetFrameworkVersionWithoutV>2.0</_TargetFrameworkVersionWithoutV>
<LangVersion>55.0</LangVersion>
</PropertyGroup>
<Import Project=""Microsoft.CSharp.Core.targets"" />
</Project>
"));
var instance = CreateProjectInstance(xmlReader);
instance.Build(GetTestLoggers());
var langVersion = instance.GetPropertyValue("LangVersion");
var maxLangVersion = instance.GetPropertyValue("_MaxSupportedLangVersion");
Assert.Equal("55.0", langVersion);
Assert.Equal("7.3", maxLangVersion);
}
[Fact]
public void GenerateEditorConfigIsPassedToTheCompiler()
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册