我有一个 VS2017 的 C# 项目,.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.dat
生成file.out
(在实际代码中,增量构建目标和属性在通过NuGet包自动包含的目标文件中)。
问题在于,如果我更改了file.dat
并点击Build,就根本不会执行任何目标(但使用Rebuild或msbuild运行时正确执行MyTarget
)。我希望执行MyCompileTarget
,以便更新file.out
文件。
如果我使用BeforeBuild
或AfterBuild
代替PrepareResourcesDependsOn
等,则同样存在此问题。
似乎只有在@(Compile)
或@(EmbeddedResource)
中的某个文件发生更改时,Visual Studio增量构建才会启动。确实,如果我添加以下内容
<EmbeddedResource>file.dat</EmbeddedResource>
增量构建按预期工作(但是我不想将 file.dat
嵌入生成的程序集中)。
如果修改了 file.dat
,且相应的生成文件早于 file.dat
或者不存在,是否可以强制 Visual Studio 启用增量构建?
注意:使用 .NET CORE 或者 .NET FRAMEWORK 的 VS2015 也会出现同样的问题。另外,如果我改变了一个 csharp 文件,增量构建将会被触发,因此触发 MyTask
,但只有在 file.dat
比生成文件新时才会如预期那样工作。
谢谢, Fabio.
<WriteLinesToFile File="$(TLogLocation)$(ProjectName).write.u.tlog" Lines="@(MyItem->'%(FileName).out"/>
。 - stijn