我正在尝试在使用Visual Studio 2017编写的代码库中使用Visual Studio 2019,并且立即发现了构建问题。我有一个switch case
语句,其中情况是根据常量字符串选择的。这在Visual Studio 2017中没有默认情况下是可以的,但在Visual Studio 2019中会引发构建错误。
我可以通过添加默认情况来解决此问题,但如果可能的话,我想避免更改代码并只更改编译器设置,以避免需要拉取请求。无论如何,理解问题的原因都很重要。
public class Program
{
public const string Database = "MongoDB";
public static string GetDb()
{
switch (Database)
{
case "MongoDB":
return Database;
}
}
}
可以在Github存储库中找到包含示例解决方案的代码,网址为:https://github.com/martineyles/NoDefaultCase。其中包括示例解决方案在添加到Github之前的存档。
在Visual Studio 2017中,构建的输出为:
1>------ Rebuild All started: Project: NoDefaultCase, Configuration: Debug Any CPU ------
1> NoDefaultCase -> C:\Users\MartinEyles\source\repos\NoDefaultCase\NoDefaultCase\bin\Debug\NoDefaultCase.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
在 Visual Studio 2019 中,构建的输出为:1>------ Rebuild All started: Project: NoDefaultCase, Configuration: Debug Any CPU ------
1>C:\Users\MartinEyles\source\repos\NoDefaultCase\NoDefaultCase\Program.cs(9,30,9,35): error CS0161: 'Program.GetDb()': not all code paths return a value
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
我正在针对 .net framework 4.7.2 和默认语言版本进行开发。我还尝试将语言版本降低到 C# 6.0,并手动将语言版本设置为 C# 7.3,但结果相同。
我使用的 Visual Studio 版本是:
Microsoft Visual Studio Enterprise 2017
Version 15.9.11
VisualStudio.15.Release/15.9.11+28307.586
Microsoft .NET Framework Version 4.7.03056
和
Microsoft Visual Studio Enterprise 2019
Version 16.0.0
VisualStudio.16.Release/16.0.0+28729.10
Microsoft .NET Framework Version 4.7.03056
问题已在以下版本中解决:
Microsoft Visual Studio Enterprise 2019
Version 16.0.3
VisualStudio.16.Release/16.0.3+28803.352
Microsoft .NET Framework Version 4.7.03056