您可以为 C# 版本添加预处理器指令吗?
Posted
技术标签:
【中文标题】您可以为 C# 版本添加预处理器指令吗?【英文标题】:Can you add a preprocessor directive for a C# version? 【发布时间】:2021-01-31 07:10:41 【问题描述】:有没有办法添加一个预处理器指令来比较编译器使用的 C# 版本?
例如:
public T MyMethod<T>()
#if CS_7
return default; // Feature 'default literal' is not available in C# 7.0. Please use 7.1 or greater.
#else
return null; // Ignore the fact that this won't work, it isn't the point of the question
#endif
.NET 版本会是这里的出路吗?不会有同一个项目使用的编译器不同的情况吗? (即如果不同的员工使用不同版本的 Visual Studio)
【问题讨论】:
一旦编译完成,C# 版本就无关紧要了。您打算以源代码形式提供此内容吗? 该项目被用作跨多个其他项目的子模块(git),所以我猜答案是肯定的? 是否有理由需要将其编译到每个项目中,而不是在单独的程序集中引用?设置私有 NuGet 服务器(本地或托管)并向其发布包非常容易。 我可以向我的上级提及这个想法,但我无法做出这个决定。 【参考方案1】:显然你不能,但是使用的 C# 版本取决于项目中使用的框架版本 (list of version per framework),它提供默认的 C# 版本,除非通过类似属性的东西手动配置(请参阅链接文档) .
因此,大多数需要 C# 版本预处理器指令的情况可以通过添加 framework preprocessor directive 或使用项目文件中的属性强制项目本身中的特定 C# 版本来解决。
【讨论】:
以上是关于您可以为 C# 版本添加预处理器指令吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 的 #if 中使用 #define 预处理器指令是不是有效