2017-07-26 27 views
2

我對當前任務有兩個目標;自動增加Nuget軟件包版本的複製將生成的.nupkg文件複製到新建的文件夾中。當我使用MSBuild屬性函數時,不能將nuget文件複製到目的地

隨着<GeneratePackageOnBuild>True</GeneratePackageOnBuild>的.csproj文件中,我試圖用一個動態方法(的MSBuild屬性函數),以增加我的組裝版本的版本號。而不是靜態定義<version>1.0.0</version>我能夠創建像這樣動態的東西; <version>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</version>。這會在bin/debug文件夾內創建一個名爲projectName.2017.7.26.nupkg的文件。

此過程生成一個文件,但它會在msbuild構建過程中導致同步問題。在第二階段,當我嘗試將文件複製到目標,我得到的錯誤:無法複製該文件的「bin \調試\ projectName.2017.07.26.nupkg」,因爲它沒有發現

出現此錯誤後半秒鐘,Nuget軟件包文件出現在bin \ debug文件夾中,並具有相同的名稱。

如果我不使用$([System.DateTime]::Now.ToString("yyyy.MM.dd"))但使用靜態版本號如1.0.101,一切正常,文件被複制到目標文件夾。

這是從我的csproj文件中的相關部分:

<PropertyGroup> 
    <NewVersionNumber>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</NewVersionNumber> 
    <CopyDestionationPath>..\Nuget</CopyDestionationPath> 
</PropertyGroup> 
<PropertyGroup> 
    <TargetFrameworks>netcoreapp1.0;net46;net40</TargetFrameworks> 
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild> 
    <PackageId>$(AssemblyName)</PackageId> 
    <version>$(NewVersionNumber)</version> 
    <title>A Package</title> 
    ..... 
</PropertyGroup> 
..... 
<Target Name="CopyPackage" AfterTargets="Pack"> 
    <ItemGroup> 
     <OldNugetFiles Include="$(CopyDestionationPath)\*nupkg" /> 
    </ItemGroup> 
    <ItemGroup> 
     <NewNugetFile Include="$(OutputPath)$(PackageId).$(PackageVersion).nupkg" /> 
    </ItemGroup> 
    <Delete Files="@(OldNugetFiles)" /> 
    <Copy SourceFiles="@(NewNugetFile)" DestinationFolder="$(CopyDestionationPath)"/> 
</Target> 

我需要的東西在AfterTargets CopyPackage任務否則,目前它的設置預先定義的包的目標是什麼?

回答

1

看來你的問題是將從版本號中刪除前導零。例如,如果PackageVersion2017.07.27,那麼生成的文件將被稱爲projectName.2017.7.27.nupkg,但是您特別在尋找其中存在額外0的文件 - 這實際上並不存在。

如果使用

<NewVersionNumber>$([System.DateTime]::Now.ToString("yyyy.M.d"))</NewVersionNumber> 

您的代碼應工作。

+0

是的,這是正確的,謝謝!我很幸運,發現它是在我昨天離開工作之前的格式化時刻完成的,我嘗試了這個並開始工作,然後認爲它與格式有關。 ' $([System.DateTime] :: Now.ToString(「dd」)) $([System.string] :: Concat(「1.0.0。」,$(Days)))」。我確切知道爲什麼多虧了你現在的解釋。 –

相關問題