【问题标题】:Get UWP Package.appxmanifest version in MSBuild在 MSBuild 中获取 UWP Package.appxmanifest 版本
【发布时间】:2017-08-14 10:47:08
【问题描述】:

我需要 MSBuild.Target 中的 Package.appxmanifest 版本。 我要做的是:

<Target Name="Zip">
<ItemGroup>
    <BinDirectoryFiles Include="...\AppPackages\My-App_$(Version)\**\*.*" />
</ItemGroup>
<Zip Files="@(BinDirectoryFiles)" WorkingDirectory="...\AppPackages\My-App_$(Version)" 
ZipFileName="...\Zip\My-App_$(Version).zip" />

(我缩短了路径和名称)

所以这是我压缩应用程序包以将其上传到 HockeyApp 的目标。 (如果我用版本号硬编码完整的文件名,则 zip 目标正在工作。)但是为了获得正确的 apppackage 和正确的 zip 文件名称,我需要在 Package.appxmanifest 中设置的版本。但我不知道如何在 .csproj 文件中的 MSBuild.Target 中获取它。

【问题讨论】:

    标签: msbuild uwp appxmanifest


    【解决方案1】:

    Package.appxmanifest 只是一个 xml 文件,因此您可以创建自定义 MSBuild 任务来读取它,或者使用 MSBuild 扩展包来获取值。

    以下 MSBuild 文件包含一个自定义 GetPackageVersion,它将从当前文件夹中读取 Package.appxmanifest 并输出版本:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0"
             DefaultTargets="Build"
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
    <Target Name="Build">
      <GetPackageVersion Filename="Package.appxmanifest">
        <Output PropertyName="PackageVersion" TaskParameter="PackageVersion" />
      </GetPackageVersion>
    
      <Message Text="PackageVersion: $(PackageVersion)" />
    </Target>
    
    <UsingTask TaskName="GetPackageVersion" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
      <ParameterGroup>
        <FileName ParameterType="System.String" Required="true" />
        <PackageVersion ParameterType="System.String" Output="true" />
      </ParameterGroup>
      <Task>
        <Reference Include="System.Xml" />
        <Reference Include="System.Xml.Linq" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Xml.Linq" />
        <Code Type="Fragment" Language="cs"><![CDATA[
          var doc = XDocument.Load(FileName);
          var defaultNamespace = doc.Root.GetDefaultNamespace();
          PackageVersion = doc.Root.Element(defaultNamespace.GetName("Identity")).Attribute("Version").Value;
    ]]></Code>
      </Task>
    </UsingTask>
    
    </Project>
    

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2011-12-06
      • 2013-04-02
      • 2020-04-02
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多