MSBuild SvnInfo - 哪些目标输入是正确的?

发布于 2024-11-30 05:12:27 字数 981 浏览 1 评论 0原文

我在 MSBuild 脚本中使用 SvnInfo 任务

<SvnInfo LocalPath="$(Sources)">
  <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnInfo>

$(Sources) 仅包含源文件。

显然 SvnInfo 依赖于 $(Sources) 中的文件。 然后目标使用信息生成带有修订号的输出文件。

事实上,我想在修订号更改时运行 SvnInfo,但在修订号与上次运行相同时不运行 Target(使用增量构建)。

如何在目标中指定正确的输入(Target标签中的属性Inputs,其中包含SvnInfo任务的调用)?

我通过以下方式做到了:

<ItemGroup>
  <Target1Inputs Include="$(Sources)\**" />
</ItemGroup>

<Target Name="Target1" Inputs="@(Target1Inputs)" Outputs="...">
  ...
  <!-- SvnInfo call here -->
  <!-- File with revision number is created here -->

</Target>

在我看来这是解决方法,因为理想情况下我应该知道 SvnInfo 依赖于哪些文件而无需猜测。是否可以获得此类信息?

我也不知道 .svn 文件夹是否被修改。

I use SvnInfo task in MSBuild script:

<SvnInfo LocalPath="$(Sources)">
  <Output TaskParameter="Revision" PropertyName="Revision" />
</SvnInfo>

$(Sources) contains source files only.

Obviously SvnInfo depends on files in $(Sources).
Target then uses info to generate output file with revision number.

In fact I want to run SvnInfo when revision number is changed, but not to run Target (use incremental build) when Revision number is the same as previous run.

How to specify correctly input in target (attribute Inputs in Target tag, which contains call of SvnInfo task)?

I made it in the following way:

<ItemGroup>
  <Target1Inputs Include="$(Sources)\**" />
</ItemGroup>

<Target Name="Target1" Inputs="@(Target1Inputs)" Outputs="...">
  ...
  <!-- SvnInfo call here -->
  <!-- File with revision number is created here -->

</Target>

It seems to me its workaround, because ideally I should know which files SvnInfo depends on without guessing. Is it possible to obtain such info?

I am also not aware whether .svn folders are modified or not.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苍白女子 2024-12-07 05:12:27

基本上是这样的:

<PropertyGroup>
  <ExcludePdbs>$(YourOutputPath)\**\*.pdb</ExcludePdbs>
  <ExcludeTmp>$(YourOutputPath)\**\*tmp*</ExcludeTmp>
</PropertyGroup>

<!-- Prepare set of files -->
<ItemGroup>
   <Files Include="$(FilesToIncludeFolder)\**\*.*"
          Exclude="$(ExcludePdbs);$(ExcludeTmp);$(ExcludeOtherFiles);"/>
</ItemGroup>

<!-- Pass into the target -->
<Target Name="Target1" Inputs="@(Files)" Outputs="..." />

编辑:问题已更新,所以这里也是我的更新

假设您可以处理修订更改状态,您可以将 Condition 添加到 Target 并运行它取决于属性$(RevisionWasChanged)

<Target Condition="$(RevisionWasChanged)=='True'"` />

另外,为了控制构建脚本执行流程,您可以使用 功能:

<Choose>
    <When Condition="$(RevisionWasChanged)=='True'">
    </When>
    <Otherwise>
    </Otherwise>
</Choose>

让我知道它是否适合您。

Basically in this way:

<PropertyGroup>
  <ExcludePdbs>$(YourOutputPath)\**\*.pdb</ExcludePdbs>
  <ExcludeTmp>$(YourOutputPath)\**\*tmp*</ExcludeTmp>
</PropertyGroup>

<!-- Prepare set of files -->
<ItemGroup>
   <Files Include="$(FilesToIncludeFolder)\**\*.*"
          Exclude="$(ExcludePdbs);$(ExcludeTmp);$(ExcludeOtherFiles);"/>
</ItemGroup>

<!-- Pass into the target -->
<Target Name="Target1" Inputs="@(Files)" Outputs="..." />

EDIT: The question was updated so here is my update as well

Supposing you can handle revision changed state, you can add Condition to a Target and run it depends on property $(RevisionWasChanged).

<Target Condition="$(RevisionWasChanged)=='True'"` />

Also to control build script execution flow you can use <Choose> feature:

<Choose>
    <When Condition="$(RevisionWasChanged)=='True'">
    </When>
    <Otherwise>
    </Otherwise>
</Choose>

Let me know whether it works for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文