当我使用MSBuild属性函数时,无法将nuget文件复制到目标

时间:2017-07-26 20:22:04

标签: c# msbuild nuget csproj msbuild-4.0

我目前的任务有两个目标;自动递增Nuget包版本的版本号,并在生成后将生成的 .nupkg 文件复制到新文件夹中。

在我的 .csproj 文件中使用<GeneratePackageOnBuild>True</GeneratePackageOnBuild>我尝试使用动态方法( MSBuild属性函数)来增加我的程序集版本的版本号。而不是静态定义<version>1.0.0</version>我能够创建像这样的动态; <version>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</version>。这会在bin / debug文件夹中创建一个名为 projectName.2017.7.26.nupkg 的文件。

此过程会生成一个文件,但会在msbuild构建过程中导致同步问题。在第二步,当我尝试将文件复制到目标时,我收到错误:无法复制文件&#34; bin \ Debug \ projectName.2017.07.26.nupkg&#34;因为找不到

显示此错误后半秒,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>

我是否需要CopyPackage任务的 AfterTargets 中的其他内容,目前它是否已设置为Pack的预定义目标?

1 个答案:

答案 0 :(得分:1)

似乎您的问题是将从版本号中删除前导零。例如,如果PackageVersion2017.07.27,那么生成的文件将被称为projectName.2017.7.27.nupkg,但您正在寻找一个额外0的文件 - 实际上并非如此存在。

如果您使用

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

您的代码应该有效。