MSBuild 忽略 Target.Inputs 和 Target.Outputs 并且不执行最新检查

问题描述 投票:0回答:1

我使用 Visual Studio 2022(MSBuild 版本 17?)创建了 razor Pages Web 应用程序,并将以下内容添加到 csproj 文件中:

<Target Name="BuildCss" BeforeTargets="Build"
        Inputs="Pages/pages.css"
        Outputs="wwwroot/css/styles.css">
    <Copy SourceFiles="Pages/pages.css" DestinationFiles="wwwroot/css/styles.css" />
</Target>

我将在将 Pages/pages.css 文件复制到 wwwwroot/css 之前对其进行转换,但现在为了测试 MSBuild 的快速最新检查功能,我只需复制该文件。

现在,我第一次运行构建时,文件复制按预期成功,但之后即使我编辑pages.css文件甚至删除styles.css文件,它也不起作用。在输出窗口中我看到

========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========

我在这里做错了什么?

visual-studio msbuild csproj
1个回答
0
投票

我做了一个快速测试,可以在 VS2022 中重现相同的问题。然而,从这个文档DisableFastUpToDateCheck来看,它说

Visual Studio 构建管理器使用名为 FastUpToDateCheck 的过程来确定项目是否必须重新构建才能保持最新状态。此过程比使用 MSBuild 来确定这一点更快。将 DisableFastUpToDateCheck 属性设置为 true 可让您绕过 Visual Studio 生成管理器并强制它使用 MSBuild 来确定项目是否是最新的。

您可以在

DisableFastUpToDateCheck
文件中将属性
.csproj
设置为 true,以禁用 Visual Studio 构建管理器的
FastUpToDateCheck

<PropertyGroup>
    <DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
</PropertyGroup>
© www.soinside.com 2019 - 2024. All rights reserved.