簡體   English   中英

在多目標項目中,如何在所有構建之前只調用一次腳本

[英]How do I call my script before all the builds for only once in a multi-targeting project

在構建過程之前,我只想運行一次Powershell腳本。 在我看來,應該很容易做到,只需在PreBuildEvent確定之前調用腳本即可。 好吧,它確實適用於普通項目。

但是,對於多目標項目,在針對所有目標框架進行每次構建之前,都會多次調用該腳本。

這是我的項目文件,其中針對3個框架:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net40;net45;netstandard1.4</TargetFrameworks>
    <AssemblyName>abc</AssemblyName>
    <Version>1.0.0</Version>
  </PropertyGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="PowerShell -ExecutionPolicy Unrestricted -File script.ps1/>
  </Target>
</Project>

當我構建項目時,PreBuild目標被調用了3次。

到目前為止,我已經嘗試過:

1)首先,我猜想構建是按順序進行的,所以我向目標添加了一個條件:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition=" '$(TargetFramework)' == 'net40' ">
    <Exec Command="PowerShell -ExecutionPolicy Unrestricted -File script.ps1/>
  </Target>

,這沒有用。 事實證明,多目標構建是同時進行的。 有時,net40的構建會晚一些,所以我的腳本在所有構建之前都沒有運行。

2)然后,我嘗試使用環境變量進行同步,但是也沒有成功。 似乎這些構建沒有共享環境變量。

3)最后,我轉向其他MSBuild目標來替換PreBuildEvent,但沒有找到合適的目標。

因此,在多目標項目中,如何在所有構建之前以及僅一次調用腳本。 請幫我。

您可以將目標連接到多目標msbuild目標中,該目標將調用TargetFramework特定的構建,如下所示:

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netstandard1.4</TargetFrameworks>
  </PropertyGroup>

  <Target Name="OuterPreBuild" BeforeTargets="DispatchToInnerBuilds">
    <Message Importance="high" Text="Outer before build" />
  </Target>

</Project>

在這種情況下, BeforeTargets="Build" Condition="'$(IsCrossTargetingBuild)' == 'true'"將不起作用,因為多目標Build目標取決於已經Build的“內部項目”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM