2017-03-22 4 views
0

MSBuild.Target에서 Package.appxmanifest 버전이 필요합니다. 내가 할 것은 :MSBuild에서 UWP 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에서 가져 오는 방법을 모르겠습니다.

답변

0

Package.appxmanifest는 XML 파일 일 뿐이므로이를 읽는 사용자 지정 MSBuild 작업을 만들거나 MSBuild 확장 팩을 사용하여 값을 가져올 수 있습니다.

<?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> 
:

다음은 MSBuild 파일은 현재 폴더 및 출력에서 ​​버전을 Package.appxmanifest을 읽 사용자 정의 GetPackageVersion을 포함