在我的C ++项目中,当我触发“构建”时,Visual Studio(2017)无法检测属性值的变化(例如,通过F5请求调试器启动)。
我希望能够使用visual studio中的属性页对话框为另一个库指定路径变量。
简化版本在这里。首先,我使用.targets
文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)\overrideSettings.xml" />
</ItemGroup>
<PropertyGroup Condition="'$(myDir)' == ''">
<__my_IncludeDir>somewhere\include\</__my_IncludeDir>
</PropertyGroup>
<PropertyGroup Condition="'$(myDir)' != ''">
<__my_IncludeDir>somewhere_else\include\</__my_IncludeDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(__my_IncludeDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>$(__my_IncludeDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
</Project>
设置的.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
<Rule Name="ProjectSettings_NugetDevOverride" PageTemplate="tool" DisplayName="Nuget Development Override" SwitchPrefix="/" Order="1">
<Rule.Categories>
<Category Name="myTest" DisplayName="myTest" />
</Rule.Categories>
<Rule.DataSource>
<DataSource Persistence="UserFile" ItemType="" />
</Rule.DataSource>
<StringProperty Name="myDir" Category="myTest" />
</Rule>
</ProjectSchemaDefinitions>
现在,在某种程度上可以正常工作。
但是,Visual Studio无法正确检测属性页上定义的属性变量的更改。
myDir
;将其设置为空或设置值,以便触发.targets
文件中的其他属性组。我的设置中的问题在哪里?在构建标记为最新之前,是否可以将myDir
显式添加为要检查的属性?
我找到了一个解决方法:DisableFastUpToDateCheck
https://stackoverflow.com/a/36004494/552373
但这太可怕了,因为我真正的项目非常庞大,而且快速检查确实很有帮助。
更新20171128:
我现在也尝试了以下内容:
myDir
;将其设置为空或设置值,以便触发.targets
文件中的其他属性组。事实上,即使这不起作用,也指出了Visual Studio中FastUpToDateCheck的真正问题。
有没有人有进一步的想法?