在 Visual Studio 2019 中的编译器指令之间切换?
Posted
技术标签:
【中文标题】在 Visual Studio 2019 中的编译器指令之间切换?【英文标题】:Switching between compiler directives in Visual Studio 2019? 【发布时间】:2019-06-08 09:27:22 【问题描述】:我正在使用 Visual Studio 2019 和基于 SDK 的项目,有多个目标:
<TargetFrameworks>netstandard2.0;net45;net46</TargetFrameworks>
但是当我编写条件代码时,我(显然)看到一些灰色的代码和一些常规颜色的代码:
问题:
哪些设置决定了哪个部分是灰色的,哪个不是?
因为现在,如果我想编辑“NETFULL
”部分(因为我是多目标),它全是灰色的,我没有智能感知。
我怎么知道VS:现在让我们切换到NETFULL
模式?
注意 当然我可以删除条件,但我想知道为什么它是灰色的以及如何在它们之间切换(因为我是多目标)
【问题讨论】:
【参考方案1】:要在您的目标框架之间切换,请使用代码窗格左上角的下拉菜单:
条件编译符号在 .csproj 文件中声明:
<PropertyGroup Condition="'$(TargetFramework)' == 'net45' OR '$(TargetFramework)' == 'net46'">
<DefineConstants>NETFULL</DefineConstants>
</PropertyGroup>
或者您可以使用predefined symbols,例如NETFRAMEWORK
、NETSTANDARD
或NETCOREAPP
(或版本化的预定义符号,例如NETSTANDARD2_0
)。
【讨论】:
【参考方案2】:这是您在项目属性中定义的条件编译符号的问题。
导航到项目的属性选项卡并选择构建选项卡。在那里你可以定义那些符号。
【讨论】:
但是(无论定义如何)-它如何知道要显示哪个部分?这个 dll 可以从 net core 或 net fw 调用。顺便说一句,现在我发现我错过了defineConstant
section 搜索“netfull”here)。但即使我定义了这些,它怎么知道 targetFramework ?它只是在运行时。因为就像我说的,控制台应用程序(dotnet core)应用程序可以调用这个dll,也可以调用4.5
好吧,你定义你自己的配置,或者使用调试配置。然后只需指定其他符号,就像我在示例中所做的那样。然后,当您切换到定义的配置(在我的情况下为调试(无硬件))时,#if Additional_Symbol
下的代码处于活动状态,被编译。【参考方案3】:
重新定义 TargetFrameworks。使用相同的语法,只需放入其他目标即可。
【讨论】:
以上是关于在 Visual Studio 2019 中的编译器指令之间切换?的主要内容,如果未能解决你的问题,请参考以下文章
Unity3DUnity 脚本 ② ( Visual Studio 2019 中的 Unity 编译环境配置 | Unity 编辑器关联外部 C# 脚本编辑器 Visual Studio )
如何在 Visual Studio 2019 中启用编译器警告?
Visual Studio 2019 MVC 项目模板无法编译
使用 CMake 和 Visual Studio 2019 编译 GLEW?