c# - 如何根据已过期的输入文件执行 msbuild (csproj) 目标

标签 c# visual-studio msbuild csproj

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

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

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

这里的目的是当且仅当文件 A.txt 比 B.txt 新或 B.txt 不存在时,每次在 VS IDE 中构建 csproj 时,都会在 Visual Studio 输出窗口中回显 hello world。 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.txt 新,则目标将被跳过。不过,我建议为目标使用更有意义的名称。

关于c# - 如何根据已过期的输入文件执行 msbuild (csproj) 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69967438/

相关文章:

tfs - 在 MSBuild 中包含项目之外的文件

c# - Clean+Rebuild 和 Clean+Build 之间有什么区别吗

c# - 在VS2013中重命名生成的DLL文件

c# - 将 IIS 与 .NET Core 2.2 Web API 一起使用时自动生成的 web.config 中的硬编码路径

c# - 更改数据表列日期格式

asp.net - 安装 ASP.NET 和 Web 工具 2015 后出现 Visual Studio 错误 "Object reference not set to an instance of an object"

c# - 如何从 C 程序生成 DLL 以用于 C# 项目

德尔福XE2 : Use msbuild to build a project in command line prompt error MSB4067

c# - 从 xdocument C# 获取字典

c# - EF :6 - How to skip insertion of value if value has default value set in DB?