[英].NETStandard multi-targeting library packages do not get restored when building
[英]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.