如何解决MSBuild和VS2019中的外部定义条件编译
我有一个大型程序(Net Framework 4.7,多个解决方案,每个解决方案都有多个项目),并且希望能够集中定义一个条件编译常量并将其提取。我已经使用了每个csproj包含的中央属性文件的部分解决方案-在msbuild中可以正常工作,但在Visual Studio 2019中则不能。这使开发此代码非常棘手,因为Visual Studio将代码显示为需要灰色的常量,即使不应该。
中央文件(测试道具):
const como = this.props.dishes && this.props.dishes.comments.map((dish) => {
主要项目:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TestProperty>YES</TestProperty>
</PropertyGroup>
</Project>
测试代码:
<Import Project="Test.props" />
...
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(TestProperty)' == 'YES' ">
<DefineConstants>$(DefineConstants);TEST</DefineConstants>
</PropertyGroup>
在Visual Studio中显示为:
关于如何以一种可以在Visual Studio 2019中直接从msbuild运行的方式完成此操作的建议?我不希望有任何可行的解决方案支持项目属性,但是我希望它在代码编辑器中显示活动代码!
解决方法
实际上,该行为正确显示在我这一边。在VS IDE中,if TEST
下的部分将突出显示。
注意:您应该使用$(DefineConstants)
而不是$DefineConstants
,前者是获取MSBuild属性值的方法。
这就是我所做的。
因此,由于您的问题,建议您尝试以下步骤来解决此问题:
建议
1)在扩展菜单下-> 管理扩展
下,禁用任何第三方扩展 2)关闭VS实例,删除解决方案文件夹.vs
和bin
文件夹下的obj
隐藏文件夹。
3) repair VS或将其更新为最新版本。
然后,重新启动项目以再次进行测试。
此外,请尝试创建一个新项目以测试问题是否在新项目中发生。如果没有新内容,则可以尝试将内容从旧内容迁移到新内容。
============================
更新1
我找到了原因。更改TestProperty
的值或进行其他修改时,应首先关闭VS实例,删除.vs
隐藏文件夹以删除以前的记录并启用新的修改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。