2017-07-26 71 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)))”。我确切知道为什么多亏了你现在的解释。 –

相关问题