Visual Studio中的MSBuild-Magic错误地正确检测构建过程

时间:2017-11-27 17:12:21

标签: c++ visual-studio build msbuild build-process

在我的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无法正确检测属性页上定义的属性变量的更改。

  • 我构建项目 - &gt; 1成功
  • 我再次构建项目(F5) - &gt; 1最新
  • 我使用属性页面更改变量myDir;将其设置为空或设置值,以便触发.targets文件中的其他属性组。
  • 我再次构建项目(F5) - &gt; 1最新这是错误的!
  • 我重新构建项目 - &gt; 1成功使用了正确使用的新属性值。

我的设置中的问题在哪里?在构建标记为最新之前,是否可以将myDir显式添加为要检查的属性?

我找到了一个解决方法:DisableFastUpToDateCheck

https://stackoverflow.com/a/36004494/552373

但这太可怕了,因为我真正的项目非常庞大,而且快速检查确实很有帮助。

更新20171128:

我现在也尝试了以下内容:

  • 我构建项目 - &gt; 1成功
  • 我再次构建项目(F5) - &gt; 1最新
  • 我使用属性页面更改变量myDir;将其设置为空或设置值,以便触发.targets文件中的其他属性组。
  • 关闭Visual Studio 并再次打开它。没有弹出文件保存对话框。
  • 我再次构建项目(F5) - &gt; 1最新这是错误的!

事实上,即使这不起作用,也指出了Visual Studio中FastUpToDateCheck的真正问题。

有没有人有进一步的想法?

0 个答案:

没有答案