繁体   English   中英

如何根据过时的输入文件执行 msbuild (csproj) 目标

[英]How to execute msbuild (csproj) targets based on input files being out of date

我需要向我的 csproj 文件添加一个目标,该文件指定输入文件和输出文件。 通过链接,我尝试像这样定义目标:

<ItemGroup>
    <ins Include="A.txt" />
    <outs Include="B.txt" />
</ItemGroup>

<Target Name="ExecuteTarget" Inputs="@(ins)" Outputs="@(outs)">
    <Exec Command="echo hello world" />
</Target>

这里的目的是在每次在 VS IDE 中构建 csproj 时在 Visual Studio 输出窗口中回显 hello world 当且仅当文件 A.txt 比 B.txt 新或 B.txt 不存在时。 A.txt 和 B.txt 都与 csproj 文件位于同一目录中。

但是,这似乎不起作用,因为当我构建此 csproj 时,我无法在输出窗口中打印字符串“hello world”。 我正在使用 VS 16.11.5 以及 .NET 5.0 启用的 csproj (WinUI)。

任何帮助/想法/建议将不胜感激。

必须在某处调用目标,只有输入和输出是不够的。 有几种方法可以做到这一点:使用CallTarget显式调用它,或者使其成为另一个目标的依赖项(因此另一个被调用的目标具有Dependencies="ExecuteTarget" ),或者使用AfterTargets等。

例如<Target Name="ExecuteTarget" Inputs="@(ins)" Outputs="@(outs)" AfterTargets="CoreCompile">应该这样做,如果 B.txt 存在并且比 A 新,则目标将被跳过。文本。 不过,我建议为目标使用更有意义的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM