在 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,例如NETFRAMEWORKNETSTANDARDNETCOREAPP(或版本化的预定义符号,例如NETSTANDARD2_0)。

【讨论】:

【参考方案2】:

这是您在项目属性中定义的条件编译符号的问题。

导航到项目的属性选项卡并选择构建选项卡。在那里你可以定义那些符号。

【讨论】:

但是(无论定义如何)-它如何知道要显示哪个部分?这个 dll 可以从 net core 或 net fw 调用。顺便说一句,现在我发现我错过了defineConstantsection 搜索“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?

允许此预编译站点可更新 Visual Studio 2019

如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发行版