Target Frameworks documentation page引用某些定义是根据项目的目标框架自动设置的,我假设它将根据Target framework
中的Properties > Application
字段进行更改:
或者在创建新的Visual C#项目时选择Target框架(New Project> Visual C#> Console App(.NET Framework))
但是,据我测试,文档中指定的任何定义都没有实际定义。
例如,如果我创建.NET Framework 3.5
项目或手动设置现有项目以在属性中定位.NET Framework 3.5
,则不定义NET35
。
我已经采取了文档页面上列出的每个定义,并添加了打印的调试代码,如果定义了任何或所有,并且似乎没有定义:源代码:https://gist.github.com/JohannesMP/ece8987fa18b2eaf830d7426c2256d6b
我是否应该对何时或如何设置这些定义做出错误的假设?我还有什么其他可移植方式可以基于目标框架在每个行的基础上有条件地编译代码?
我正在使用默认的Microsoft .NET Framework版本4.7.03056运行Visual Studio Community 2017版本15.8.4
不会。这样的预定义常量只有在您处理新的SDK项目格式和多个目标框架(例如net45
和netstandard1.3
)时才有效。它们的存在是为了帮助您执行条件编译以支持多个框架。 My blog post展示了一个具体的例子。
因此,您应该创建一个使用新格式的新项目,而不是.NET Framework Console Application模板。
如果从引用中删除,则控制台应用程序不起作用,但使用窗口应用程序:Microsoft.CSharp和System.Net.http