How to avoid that Visual Studio incremental build does not run when files outside <Compile> and <EmbeddedResource> are changed?
我有一个 VS2017 csharp 项目,.csproj 文件如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> <ItemGroup> <MyItem Include="file.dat" /> </ItemGroup> <PropertyGroup> <PrepareResourcesDependsOn> $(PrepareResourcesDependsOn); MyCompileTarget </PrepareResourcesDependsOn> <CoreCompileDependsOn> $(CoreCompileDependsOn); MyCompileTarget </CoreCompileDependsOn> </PropertyGroup> <Target Name="MyCompileTarget" Inputs="@(MyItem)" Outputs="@(MyItem->'%(FileName).out')"> ... </Target> </Project> |
其中
问题是,如果我更改
如果我使用
似乎除非更改
1 | <EmbeddedResource>file.dat</EmbeddedResource> |
增量构建按预期工作(但显然我不想将
如果修改了
注意:使用 .NET CORE 或 .NET FRAMEWORK 的 VS2015 也会出现同样的问题。
此外,如果我更改 csharp 文件,将触发增量构建,因此它将触发
提前致谢,
法比奥。
Is it possible to force Visual Studio to enable incremental build if file.dat is modified
您可以在项目文件中将属性
1 2 3 | <PropertyGroup> <DisableFastUpToDateCheck>True</DisableFastUpToDateCheck> </PropertyGroup> |
查看 MSDN 关于 DisableFastUpToDateCheck:
A boolean value that applies to Visual Studio only. The Visual Studio
build manager uses a process called FastUpToDateCheck to determine
whether a project must be rebuilt to be up to date. This process is
faster than using MSBuild to determine this. Setting the
DisableFastUpToDateCheck property to true lets you bypass the Visual
Studio build manager and force it to use MSBuild to determine whether
the project is up to date
更新:
此外,我们可以将
1 | <UpToDateCheckInput Include="file.dat" /> |
禁用 VS 快速更新检查将使您的构建速度慢得多。不要这样做!
相反,请确保最新检查了解您项目中的项目以及它们与构建的关系。为此,您可以将两种项目添加到您的项目中:
-
UpToDateCheckInput 用于输入 -
UpToDateCheckBuilt 用于输出
在您的情况下,您需要第二个选项,因为既有输入又有输出。您需要确保如果您删除输出,它会被重建。
1 2 3 | <PropertyGroup> <UpToDateCheckBuilt Original="@(MyItem)" Include="@(MyItem->'%(FileName).out')"> </PropertyGroup> |
有关详细信息,请参阅文档:
https://github.com/dotnet/project-system/blob/main/docs/up-to-date-check.md