Fab*_*cco 3 msbuild visual-studio incremental-build visual-studio-2017
我有一个VS2017 csharp项目,.csproj文件如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
其中MyCompileTarget
的是,生成一个目标file.out
从file.dat
(在实际的代码的增量生成目标和特性在经由NuGet包自动包括一个目标文件)。
问题是,如果我改变file.dat
并按上构建,没有目标,执行在所有(但MyTarget
被正确执行与重建或MSBuild的运行时)。我希望MyCompileTarget
可以执行以便file.out
更新文件。
如果我使用BeforeBuild
或AfterBuild
代替PrepareResourcesDependsOn
etc,则会发生相同的问题。
除非添加了@(Compile)
或@(EmbeddedResource)
更改了某些文件,否则Visual Studio增量构建似乎无法启动。确实,如果我添加以下内容
<EmbeddedResource>file.dat</EmbeddedResource>
Run Code Online (Sandbox Code Playgroud)
增量构建按预期工作(但显然我不想将其file.dat
嵌入到生成的程序集中)。
是否可以强制Visual Studio启用增量file.dat
生成(如果已修改)以及相应的生成文件是否早于file.dat
或不存在?
注意:使用VS2015和.NET CORE或.NET FRAMEWORK时,会发生相同的问题。另外,如果我更改csharp文件,则将触发增量生成,因此它将触发MyTask
,但前提是它file.dat
比生成的文件新(如预期的那样)。
在此先感谢Fabio。
如果file.dat被修改,是否可以强制Visual Studio启用增量生成
您可以在项目文件中将属性设置DisableFastUpToDateCheck
为true
,以禁用FastUpToDateCheck
Visual Studio构建管理器:
<PropertyGroup>
<DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
检查有关DisableFastUpToDateCheck的MSDN:
一个仅适用于Visual Studio的布尔值。Visual Studio生成管理器使用名为FastUpToDateCheck的过程来确定是否必须重建项目以保持最新。此过程比使用MSBuild确定此过程更快。将DisableFastUpToDateCheck属性设置为true可让您绕过Visual Studio构建管理器,并强制其使用MSBuild来确定项目是否最新。
更新:
另外,我们可以将设置UpToDateCheckInput
为以下项目:
<UpToDateCheckInput Include="file.dat" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1265 次 |
最近记录: |