我有一个 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>
MyCompileTarget
生成file.out
from的目标在哪里file.dat
(在实际代码中,增量构建目标和属性位于通过 NuGet 包自动包含的目标文件中)。
问题是,如果我更改file.dat
并按下Build,则根本不会执行任何目标(但使用Rebuild或使用 msbuild 运行时正确执行)。我希望执行该文件以便更新文件。MyTarget
MyCompileTarget
file.out
BeforeBuild
如果我使用orAfterBuild
代替PrepareResourcesDependsOn
etc ,也会出现同样的问题。
似乎除非更改了某些文件,否则 Visual Studio 增量构建将不会@(Compile)
启动@(EmbeddedResource)
。确实,如果我添加以下内容
<EmbeddedResource>file.dat</EmbeddedResource>
增量构建按预期工作(但显然我不想将其file.dat
嵌入到生成的程序集中)。
是否可以强制 Visual Studio 启用增量构建,如果file.dat
已修改,并且相应生成的文件早于file.dat
或不存在?
注意:使用 .NET CORE 或 .NET FRAMEWORK 的 VS2015 也会出现同样的问题。此外,如果我更改 csharp 文件,将触发增量构建,因此它会触发MyTask
,但前提file.dat
是它比生成的文件更新(如预期的那样)。
在此先感谢,法比奥。