从.nuspec文件构建目标引用

时间:2017-09-24 18:37:32

标签: msbuild nuget-package msbuild-task

我在VS 2017中的.csproj文件中创建了一个构建目标

<Target Name="CopyPackage" AfterTargets="Pack">
    <Copy
        SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
        DestinationFolder="\\myshare\packageshare\"
        />
</Target>

.csproj文件中需要提及“PackageId”和“PackageVersion”才能实现目标。

<PackageId>My Package</PackageId>
<PackageVersion>1.0.0</PackageVersion>

但是我在.nuspec文件中定义了变量。

是否可以从.csproj中的.nuspec文件中访问任何变量?

1 个答案:

答案 0 :(得分:1)

如果您已有.nuspec文件并想查询其内容,则可以使用MSBuild XmlPeek任务:

<Target Name="PrintVersions" AfterTargets="Pack">
  <XmlPeek Namespaces="&lt;Namespace Prefix='nu' Uri='http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd'/&gt;"
           XmlInputPath="$(NuspecFile)" 
           Query="/nu:package/nu:metadata/nu:id/text()">
    <Output TaskParameter="Result" PropertyName="MyPackageId" />
  </XmlPeek>
  <XmlPeek Namespaces="&lt;Namespace Prefix='nu' Uri='http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd'/&gt;"
           XmlInputPath="$(NuspecFile)" 
           Query="/nu:package/nu:metadata/nu:version/text()">
    <Output TaskParameter="Result" PropertyName="PackageVersion" />
  </XmlPeek>
  <Message Importance="high" Text="PackageId: $(PackageId)" />
  <Message Importance="high" Text="PackageVersion: $(MyPackageVersion)" />
</Target>