You are on page 1of 37

<?xml version="1.0" encoding="utf-8" ?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersio n="4.0"> <PropertyGroup> <AppxMSBuildToolsPath>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v1 1.0\AppxPackage\</AppxMSBuildToolsPath> </PropertyGroup> <UsingTask TaskName="Microsoft.Build.AppxPackage.

GetMakepriExeFullPath" Asse mblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GeneratePriConfigurationFil es" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GenerateProjectPriFile" Ass emblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.RemoveDuplicatePriFiles" As semblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GetDefaultResourceLanguage" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GetPackageArchitecture" Ass emblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.ExpandPriContent" AssemblyF ile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GenerateAppxManifest" Assem blyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.ValidateAppxManifest" Assem blyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.ValidateAppxManifestItems" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GenerateAppxPackage" Assemb lyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GenerateProjectArchitecture sFile" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GenerateAppxPackageRecipe" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.ExpandPayloadDirectories" A ssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.RemoveDuplicatePayload" Ass emblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.RemoveDuplicateSDKReference s" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.SignAppxPackage" AssemblyFi le="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.CreateAppStoreContainer" As semblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GenerateAppxSymbolPackage" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.ExtractHashUri" AssemblyFil e="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.ValidateAppxPackage" Assemb lyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.CreateAppxLayout" AssemblyF ile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.UnregisterAppx" AssemblyFil e="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.CreatePriFilesForPortableLi braries" AssemblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/> <UsingTask TaskName="Microsoft.Build.AppxPackage.GetFrameworkSdkPackages" As semblyFile="$(AppxMSBuildToolsPath)Microsoft.Build.AppxPackage.dll"/>

<!-- Adjust AppxPackage to be true Boolean flag. --> <PropertyGroup> <AppxPackage Condition="'$(AppxPackage)' != 'true'">false</AppxPackage> </PropertyGroup> <!-- Flags controlling certain features --> <PropertyGroup> <AppxUseHardlinksIfPossible Condition="'$(AppxUseHardlinksIfPossible)' = = ''">true</AppxUseHardlinksIfPossible> <AppxSkipUnchangedFiles Condition="'$(AppxSkipUnchangedFiles)' == ''">tr ue</AppxSkipUnchangedFiles> <AppxGeneratePriEnabled Condition="'$(AppxGeneratePriEnabled)' == ''">tr ue</AppxGeneratePriEnabled> <AppxPackageSigningEnabled Condition="'$(AppxPackageSigningEnabled)' == ''">true</AppxPackageSigningEnabled> <AppxPackageIncludePrivateSymbols Condition="'$(AppxPackageIncludePrivat eSymbols)' == ''">false</AppxPackageIncludePrivateSymbols> <AppxSymbolPackageEnabled Condition="'$(AppxSymbolPackageEnabled)' == '' ">true</AppxSymbolPackageEnabled> <AppxTestLayoutEnabled Condition="'$(AppxTestLayoutEnabled)' == ''">true </AppxTestLayoutEnabled> <AppxPackageValidationEnabled Condition="'$(AppxPackageValidationEnabled )' == ''">true</AppxPackageValidationEnabled> <AppxHarvestWinmdRegistration Condition="'$(AppxHarvestWinmdRegistration )' == ''">true</AppxHarvestWinmdRegistration> <AutoIncrementPackageRevision Condition="'$(AutoIncrementPackageRevision )' == ''">true</AutoIncrementPackageRevision> <AppxPrependPriInitialPath Condition="'$(AppxPrependPriInitialPath)' == ''">true</AppxPrependPriInitialPath> <EnableSigningChecks Condition=" '$(EnableSigningChecks)' == '' ">true</ EnableSigningChecks> <AppxStrictManifestValidationEnabled Condition="'$(AppxStrictManifestVal idationEnabled)' == ''">true</AppxStrictManifestValidationEnabled> </PropertyGroup> <!-- Various properties not intended for overriding. --> <PropertyGroup> <AppxOSMinVersion Condition="'$(AppxOSMinVersion)' == ''">6.2.1</AppxOSM inVersion> <AppxOSMaxVersionTested Condition="'$(AppxOSMaxVersionTested)' == ''">$( AppxOSMinVersion)</AppxOSMaxVersionTested> </PropertyGroup> <!-- Various overridable properties. --> <PropertyGroup> <AppxPackageDirName Condition="'$(AppxPackageDirName)' == ''">AppPackage s</AppxPackageDirName> <AppxPackageDir Condition=" '$(OutDirWasSpecified)' == 'true' ">$(OutDir )$(AppxPackageDirName)\</AppxPackageDir> <AppxPackageDir Condition="'$(AppxPackageDir)' == ''">$(ProjectDir)$(App xPackageDirName)\</AppxPackageDir> <AppxPackageDir Condition="!HasTrailingSlash('$(AppxPackageDir)')">$(App xPackageDir)\</AppxPackageDir> <AppxPackageArtifactsDir Condition="'$(AppxPackageArtifactsDir)' == ''"> </AppxPackageArtifactsDir> <AppxManifestSchema Condition="'$(AppxManifestSchema)' == ''">$(TargetPl atformSdkPath)\Include\WinRT\AppxManifestSchema.xsd</AppxManifestSchema> <FinalAppxManifestName Condition="'$(FinalAppxManifestName)' == ''">$(Ta rgetDir)$(AppxPackageArtifactsDir)AppxManifest.xml</FinalAppxManifestName> <AppxValidateAppxManifest Condition="'$(AppxValidateAppxManifest)' == ''

">true</AppxValidateAppxManifest> <MakePriExeFullPath Condition="'$(MakePriExeFullPath)' == ''"></MakePriE xeFullPath> <PdbCopyExeFullPath Condition="'$(PdbCopyExeFullPath)' == ''">$(AppxMSBu ildToolsPath)PDBCopy.exe</PdbCopyExeFullPath> <AppxPriInitialPath Condition="'$(AppxPrependPriInitialPath)' != 'true'" ></AppxPriInitialPath> <AppxPriInitialPath Condition="'$(AppxPrependPriInitialPath)' == 'true' and '$(AppxPackage)' == 'true' and '$(AppxPriInitialPath)' == ''"></AppxPriIniti alPath> <AppxPriInitialPath Condition="'$(AppxPrependPriInitialPath)' == 'true' and '$(AppxPackage)' != 'true' and '$(AppxPriInitialPath)' == ''">$(TargetName)< /AppxPriInitialPath> <ProjectPriFileName Condition="'$(AppxPackage)' == 'true' and '$(Project PriFileName)' == ''">resources.pri</ProjectPriFileName> <ProjectPriFileName Condition="'$(AppxPackage)' != 'true' and '$(Project PriFileName)' == ''">$(AppxPriInitialPath).pri</ProjectPriFileName> <ProjectPriFullPath Condition="'$(ProjectPriFullPath)' == ''">$(TargetDi r)$(AppxPackageArtifactsDir)$(ProjectPriFileName)</ProjectPriFullPath> <AppxPackageRecipe Condition="'$(AppxPackageRecipe)' == ''">$(TargetDir) $(AppxPackageArtifactsDir)$(ProjectName).build.appxrecipe</AppxPackageRecipe> <FinalAppxPackageRecipe Condition="'$(FinalAppxPackageRecipe)' == ''">$( TargetDir)$(AppxPackageArtifactsDir)$(ProjectName).appxrecipe</FinalAppxPackageR ecipe> <AppxLayoutFolder Condition="'$(AppxLayoutFolder)' == ''">Layout</AppxLa youtFolder> <AppxLayoutDir Condition="'$(AppxLayoutDir)' == ''">$(TargetDir)$(AppxPa ckageArtifactsDir)$(AppxLayoutFolder)\</AppxLayoutDir> <AppxLayoutDir Condition="!HasTrailingSlash('$(AppxLayoutDir)')">$(AppxL ayoutDir)\</AppxLayoutDir> <AllowLocalNetworkLoopback Condition="'$(AllowLocalNetworkLoopback)' == ''">true</AllowLocalNetworkLoopback> <AppxDefaultHashUri Condition="'$(AppxDefaultHashUri)' == ''">http://www .w3.org/2001/04/xmlenc#sha256</AppxDefaultHashUri> <LayoutDir Condition="'$(LayoutDir)'==''">$(TargetDir)AppX</LayoutDir> <ManagedWinmdInprocImplementation Condition="'$(ManagedWinmdInprocImplem entation)' == ''">CLRHost.dll</ManagedWinmdInprocImplementation> <UseIncrementalAppxRegistration Condition="'$(UseIncrementalAppxRegistra tion)' == ''">true</UseIncrementalAppxRegistration> <AppxPackagingInfoFile Condition="'$(AppxPackagingInfoFile)' == ''">$(In termediateOutputPath)_pkginfo.txt</AppxPackagingInfoFile> <AppxOSMinVersionReplaceManifestVersion Condition="'$(AppxOSMinVersionRe placeManifestVersion)' == ''">true</AppxOSMinVersionReplaceManifestVersion> <AppxOSMaxVersionTestedReplaceManifestVersion Condition="'$(AppxOSMaxVer sionTestedReplaceManifestVersion)' == ''">true</AppxOSMaxVersionTestedReplaceMan ifestVersion> </PropertyGroup> <!-- Calculate whether to allow debug framework references in app manifest. --> <!-- Allow overriding this from command line or user config file if necessar y. --> <PropertyGroup Condition="'$(AppxPackageAllowDebugFrameworkReferencesInManif est)' == ''"> <!-- If inside Visual Studio, if not packaging for store, allow debug fr amework references. --> <AppxPackageAllowDebugFrameworkReferencesInManifest Condition="'$(Buildi ngInsideVisualStudio)' == 'true'

and '$(AppxPa ckageIsForStore)' != 'true'">true</AppxPackageAllowDebugFrameworkReferencesInMan ifest> <!-- On command line, if building with Debug SDK configuration, allow de bug framework references. --> <AppxPackageAllowDebugFrameworkReferencesInManifest Condition="'$(Buildi ngInsideVisualStudio)' != 'true' and '$(Target edSDKConfiguration)' == 'Debug'">true</AppxPackageAllowDebugFrameworkReferencesI nManifest> <!-- All other cases, do not allow debug framework references. --> <AppxPackageAllowDebugFrameworkReferencesInManifest Condition="'$(AppxPa ckageAllowDebugFrameworkReferencesInManifest)' == ''">false</AppxPackageAllowDeb ugFrameworkReferencesInManifest> </PropertyGroup> <!-When building on the command line or in TFS (determined by looking at th e $(BuildingInsideVisualStudio) property), if build is invoked on an app package-producing project, the package for the project will be produ ced as part of building the project without specifying any additional flags or targets. This is control by an MSBuild property named GenerateA ppxPackageOnBuild which is set to true by default. If $(BuildingInsideVisualStudio) = false and $(GenerateAppxPackageOnBuil d) = true, then build will also produce a package. --> <PropertyGroup> <GenerateAppxPackageOnBuild Condition="'$(AppxPackage)' == 'true' and '$ (GenerateAppxPackageOnBuild)' == '' and '$(BuildingInsideVisualStudio)' != 'true '">true</GenerateAppxPackageOnBuild> </PropertyGroup> <!-- Names of the files which are allways present on the machine and should not be part of the payload. --> <ItemGroup> <AppxSystemBinary Include="CLRHost.dll" /> <AppxSystemBinary Include="CLRHost.exe" /> </ItemGroup> <!-- Reserved file names which cannot appear in the package. --> <ItemGroup> <AppxReservedFileName Include="AppxManifest.xml" /> <AppxReservedFileName Include="AppxBlockMap.xml" /> <AppxReservedFileName Include="[Content_Types].xml" /> <AppxReservedFileName Include="AppxSignature.p7x" /> <AppxReservedFileName Include="Microsoft.System.Package.Metadata" /> </ItemGroup> <!-- XPath queries used to extract file names from the manifest. --> <PropertyGroup> <AppxManifestQueryNamespacePrefix>m</AppxManifestQueryNamespacePrefix> </PropertyGroup> <ItemGroup> <AppxManifestFileNameQuery Include="./m:Package/m:Extensions/m:Extension /m:InProcessServer/m:Path" />

<AppxManifestFileNameQuery Include="./m:Package/m:Extensions/m:Extension /m:OutOfProcessServer/m:Path" /> <AppxManifestFileNameQuery Include="./m:Package/m:Extensions/m:Extension /m:ProxyStub/m:Path" /> <AppxManifestFileNameQuery Include="./m:Package/m:Extensions/m:Extension /m:GameExplorer/@GameDefinitionContainer" /> <AppxManifestFileNameQuery Include="./m:Package/m:Extensions/m:Extension /m:Certificates/m:Certificate/@Content" /> <AppxManifestFileNameQuery Include="./m:Package/m:Applications/m:Applica tion/@Executable" /> <AppxManifestFileNameQuery Include="./m:Package/m:Applications/m:Applica tion/m:Extensions/m:Extension/@Executable" /> </ItemGroup> <!-- XPath queries used to extract image file names from the manifest. --> <ItemGroup> <AppxManifestImageFileNameQuery Include="./m:Package/m:Properties/m:Logo "> <DescriptionID>StoreLogo</DescriptionID> <ExpectedWidth>50</ExpectedWidth> <ExpectedHeight>50</ExpectedHeight> </AppxManifestImageFileNameQuery> <AppxManifestImageFileNameQuery Include="./m:Package/m:Applications/m:Ap plication/m:VisualElements/@Logo"> <DescriptionID>TileLogo</DescriptionID> <ExpectedWidth>150</ExpectedWidth> <ExpectedHeight>150</ExpectedHeight> </AppxManifestImageFileNameQuery> <AppxManifestImageFileNameQuery Include="./m:Package/m:Applications/m:Ap plication/m:VisualElements/@SmallLogo"> <DescriptionID>SmallLogo</DescriptionID> <ExpectedWidth>30</ExpectedWidth> <ExpectedHeight>30</ExpectedHeight> </AppxManifestImageFileNameQuery> <AppxManifestImageFileNameQuery Include="./m:Package/m:Applications/m:Ap plication/m:VisualElements/m:DefaultTile/@WideLogo"> <DescriptionID>WideLogo</DescriptionID> <ExpectedWidth>310</ExpectedWidth> <ExpectedHeight>150</ExpectedHeight> </AppxManifestImageFileNameQuery> <AppxManifestImageFileNameQuery Include="./m:Package/m:Applications/m:Ap plication/m:VisualElements/m:LockScreen/@BadgeLogo"> <DescriptionID>BadgeLogo</DescriptionID> <ExpectedWidth>24</ExpectedWidth> <ExpectedHeight>24</ExpectedHeight> </AppxManifestImageFileNameQuery> <AppxManifestImageFileNameQuery Include="./m:Package/m:Applications/m:Ap plication/m:VisualElements/m:SplashScreen/@Image"> <DescriptionID>SplashScreen</DescriptionID> <ExpectedWidth>620</ExpectedWidth> <ExpectedHeight>300</ExpectedHeight> </AppxManifestImageFileNameQuery> </ItemGroup> <!-- Manifest metadata items. --> ows: <!-- Those will be transformed into Name/Value or Name/Version pairs as foll --> <!--->

<!-- If identity of the item (attribute 'Include') points to existing file a nd there is --> <!-- no supplied value or version, file version of given file will be extrac ted and stored --> <!-- as Version attribute of metadata with name equal to file name and exten sion. --> <!---> <!-- If item has metadata 'Value', then it is directly stored in the manifes t as name/value pair. --> <!-- If item has metadata 'Version', then it is directly stored in the manif est as name/version pair. --> <!---> <!-- If metadata 'Name' is supplied, it will be used instead of identity of the item. This is useful --> <!-- if we use binary to extract file version, but want to give it different name in generated manifest. --> <ItemGroup Label="AppxManifestMetadata"> <AppxManifestMetadata Include="TargetFrameworkMoniker" Condition="'$(Tar getFrameworkMoniker)' != ''"> <Value>$(TargetFrameworkMoniker)</Value> </AppxManifestMetadata> <AppxManifestMetadata Include="VisualStudio"> <Version>$(VisualStudioVersion)</Version> </AppxManifestMetadata> <AppxManifestMetadata Include="$(ComSpec)"> <Name>OperatingSystem</Name> </AppxManifestMetadata> <AppxManifestMetadata Include="$(AppxMSBuildToolsPath)Microsoft.Build.Ap pxPackage.dll" /> </ItemGroup> <!-- Packaging output group default values --> <PropertyGroup> <IncludeBuiltProjectOutputGroup Condition="'$(IncludeBuiltProjectOutputG roup)' == ''">true</IncludeBuiltProjectOutputGroup> <IncludeDebugSymbolsProjectOutputGroup Condition="'$(IncludeDebugSymbols ProjectOutputGroup)' == ''">true</IncludeDebugSymbolsProjectOutputGroup> <IncludeDocumentationProjectOutputGroup Condition="'$(IncludeDocumentati onProjectOutputGroup)' == ''">false</IncludeDocumentationProjectOutputGroup> <IncludeSatelliteDllsProjectOutputGroup Condition="'$(IncludeSatelliteDl lsProjectOutputGroup)' == ''">false</IncludeSatelliteDllsProjectOutputGroup> <IncludeSourceFilesProjectOutputGroup Condition="'$(IncludeSourceFilesPr ojectOutputGroup)' == ''">false</IncludeSourceFilesProjectOutputGroup> <IncludeContentFilesProjectOutputGroup Condition="'$(IncludeContentFiles ProjectOutputGroup)' == ''">true</IncludeContentFilesProjectOutputGroup> <IncludeSGenFilesOutputGroup Condition="'$(IncludeSGenFilesOutputGroup)' == ''">false</IncludeSGenFilesOutputGroup> <IncludeCopyLocalFilesOutputGroup Condition="'$(IncludeCopyLocalFilesOut putGroup)' == ''">true</IncludeCopyLocalFilesOutputGroup> <IncludeComFilesOutputGroup Condition="'$(IncludeComFilesOutputGroup)' = = ''">false</IncludeComFilesOutputGroup> <IncludeCustomOutputGroupForPackaging Condition="'$(IncludeCustomOutputG

roupForPackaging)' == ''">false</IncludeCustomOutputGroupForPackaging> <IncludeCopyWinmdArtifactsOutputGroup Condition="'$(IncludeCopyWinmdArti factsOutputGroup)' == ''">true</IncludeCopyWinmdArtifactsOutputGroup> <IncludeSDKRedistOutputGroup Condition="'$(IncludeSDKRedistOutputGroup)' == ''">true</IncludeSDKRedistOutputGroup> <IncludePriFilesOutputGroup Condition="'$(IncludePriFilesOutputGroup)' = = ''">true</IncludePriFilesOutputGroup> <IncludeGetResolvedSDKReferences Condition="'$(IncludeGetResolvedSDKRefe rences)' == ''">true</IncludeGetResolvedSDKReferences> </PropertyGroup> <!-- Entry points for the project systems. --> <PropertyGroup Condition="'$(AppxPackage)' == 'true'"> <CleanPackageAction>_CleanAppxPackage</CleanPackageAction> <PackageAction>_GenerateAppxPackage</PackageAction> <RebuildPackageAction>_RebuildAppxPackage</RebuildPackageAction> </PropertyGroup> <!-- Alter behavior of task ResolveAssemblyReferences to error on architectu re mismatch. --> <PropertyGroup> <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>Error</ResolveAs semblyWarnOrErrorOnTargetArchitectureMismatch> </PropertyGroup> <!-- ======================================================================= ===================== --> <!-- Overriding Publish target from Microsoft.Common.targets to tie into com mand-line publishing. --> <!-- ======================================================================= ===================== --> <Target Name="Publish" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="Build;$(PackageAction)" /> <!-**************************************************************************** ******************* **************************************************************************** ******************* Actions happening during the build **************************************************************************** ******************* **************************************************************************** ******************* --> <PropertyGroup> <PrepareForRunDependsOn> $(PrepareForRunDependsOn); _ValidatePresenceOfAppxManifestItems; GetPackagingOutputs; _GetPackageProperties; _GenerateProjectPriFile; _ComputeAppxPackagePayload; _GenerateAppxManifest; _GenerateAppxPackageRecipe </PrepareForRunDependsOn> <PrepareForRunDependsOn Condition=" '$(GenerateAppxPackageOnBuild)' == '

true'"> $(PrepareForRunDependsOn); _GenerateAppxPackage </PrepareForRunDependsOn> <PrepareForRunDependsOn> $(PrepareForRunDependsOn); _AppendToReadTlogFile; _AppendToWriteTlogFile </PrepareForRunDependsOn> </PropertyGroup> <PropertyGroup> <ValidatePresenceOfAppxManifestItemsDependsOn> $(ValidatePresenceOfAppxManifestItemsDependsOn); </ValidatePresenceOfAppxManifestItemsDependsOn> </PropertyGroup> <!-- Finds out if there is a custom AppxManifest override item, --> <!-- validates that one and only one manifest exists, --> <!-- extracts identity name and version out of the manifest, --> <!-- defines ProjectPriIndexName, --> <!-- and defines SourceAppxManifest item. --> <Target Name="_ValidatePresenceOfAppxManifestItems" DependsOnTargets="$(ValidatePresenceOfAppxManifestItemsDependsOn)" > <ItemGroup> <CustomAppxManifest Include="@(Content)" Condition="'%(Identity)' == 'AppxManifest.xml'" /> </ItemGroup> <ValidateAppxManifestItems AppxPackageProject="$()" AppxManifestItems="@(AppxManifest)" CustomAppxManifestItems="@(CustomAppxManifest )"> <Output TaskParameter="IdentityName" PropertyName="AppxManifestIdent ityName" /> <Output TaskParameter="IdentityVersion" PropertyName="AppxManifestId entityVersion" /> </ValidateAppxManifestItems> <ItemGroup> <SourceAppxManifest Include="@(AppxManifest)" Condition="'@(AppxMani fest)' != ''" /> <SourceAppxManifest Include="@(CustomAppxManifest)" Condition="'@(Cu stomAppxManifest)' != ''" /> </ItemGroup> <PropertyGroup Condition="'$(ProjectPriIndexName)' == ''"> <ProjectPriIndexName Condition="'$(AppxPackage)' == 'true'">$(AppxMa nifestIdentityName)</ProjectPriIndexName> <ProjectPriIndexName Condition="'$(AppxPackage)' != 'true'">$(AppxPr iInitialPath)</ProjectPriIndexName> </PropertyGroup> <PropertyGroup> <_CustomAppxManifestUsed Condition="'@(CustomAppxManifest)' == ''">f alse</_CustomAppxManifestUsed> <_CustomAppxManifestUsed Condition="'@(CustomAppxManifest)' != ''">t rue</_CustomAppxManifestUsed>

</PropertyGroup> </Target> <!-- ============================ --> <!-- Generating project PRI file. --> <!-- ============================ --> <PropertyGroup> <_GenerateProjectPriFileDependsOn> $(_GenerateProjectPriFileDependsOn); BeforeGenerateProjectPriFile; _GeneratePrisForPortableLibraries; _GetPriFilesFromPayload; _ComputeInputPriFiles; _GenerateProjectPriConfigurationFiles; _CalculateInputsForGenerateProjectPriFileCore; _GenerateProjectPriFileCore; _AddFileReadsAndFileWritesForProjectPri; _CreateProjectPriFileItem; _ExpandPriFiles; AfterGenerateProjectPriFile </_GenerateProjectPriFileDependsOn> </PropertyGroup> <PropertyGroup> <_PriConfigXmlPath>$(IntermediateOutputPath)priconfig.xml</_PriConfigXml Path> <_LayoutResfilesPath>$(IntermediateOutputPath)layout.resfiles</_LayoutRe sfilesPath> <_ResourcesResfilesPath>$(IntermediateOutputPath)resources.resfiles</_Re sourcesResfilesPath> <_PriResfilesPath>$(IntermediateOutputPath)pri.resfiles</_PriResfilesPat h> <_LanguageQualifiersPath>$(IntermediateOutputPath)LanguageQualifiers.txt </_LanguageQualifiersPath> </PropertyGroup> <Target Name="_GenerateProjectPriFile" Condition="'$(AppxGeneratePriEnabled)' == 'true'" DependsOnTargets="$(_GenerateProjectPriFileDependsOn)" /> <!-- Override to specify actions to happen before generating project PRI fil e. --> <Target Name="BeforeGenerateProjectPriFile" /> <!-- Generates a PRI file for all managed libraries files --> <!-- in them (and their satellites). This allows a be --> <!-- built with only .resources files, yet still be into --> <!-- an AppX package where the ResourceManager uses er. --> <Target Name="_GeneratePrisForPortableLibraries" Condition="'$(AppxPackage)' == 'true'" > that contain .resources .NET Portable Library to localized when compiled the WinRT resource manag

<ItemGroup> <_LibrariesUnfiltered Include="@(PackagingOutputs)" Condition="'%(Ex

tension)' == '.dll'" /> </ItemGroup> <RemoveDuplicatePayload Inputs="@(_LibrariesUnfiltered)"> <Output TaskParameter="Filtered" ItemName="_Libraries" /> </RemoveDuplicatePayload> <GenerateResource ExtractResWFiles="true" Sources="@(_Libraries)" UseSourcePath="$(UseSourcePath)" References="@(ReferencePath)" AdditionalInputs="$(MSBuildAllProjects)" NeverLockTypeAssemblies="$(GenerateResourceNeverLockTypeAsse mblies)" StateFile="$(IntermediateOutputPath)$(MSBuildProjectFile).Ge nerateResource.Cache" OutputDirectory="$(IntermediateOutputPath)" ExecuteAsTool="false" MSBuildRuntime="$(GenerateResourceMSBuildRuntime)" MSBuildArchitecture="$(GenerateResourceMSBuildArchitecture)" > <Output TaskParameter="FilesWritten" ItemName="ExtractedFileWrites"/ > <Output TaskParameter="OutputResources" ItemName="CreatedResWFiles" /> </GenerateResource> <ItemGroup> <FileWrites Include="@(ExtractedFileWrites)" /> </ItemGroup> <Message Importance="low" Text="Created resource files: @(CreatedResWFil es)" /> <GetMakepriExeFullPath MakePriExeFullPath="$(MakePriExeFullPath)" Condition="'$(_ActualMakePriExeFullPath)' == ''" > <Output TaskParameter="ActualMakePriExeFullPath" PropertyName="_Actu alMakePriExeFullPath" /> </GetMakepriExeFullPath> <!-- Now generate a PRI file for each set of ResW files (ie, a main asse mbly + all satellites). --> <!-- Note: The task relies on some metadata set on each ITaskItem, set b y GenerateResource. --> <CreatePriFilesForPortableLibraries MakePriExeFullPath="$(_ActualMakePriExeFullPath)" ContentToIndex="@(CreatedResWFiles)" IntermediateDirectory="$(IntermediateOutputPath)" AdditionalMakepriExeParameters="$(AppxCreatePriFilesForP ortableLibrariesAdditionalMakepriExeParameters)" DefaultResourceLanguage="$(DefaultResourceLanguage)" > <Output TaskParameter="IntermediateFileWrites" ItemName="FileWrites" /> <Output TaskParameter="CreatedPriFiles" ItemName="_PortableLibraryCr eatedPriFiles" />

</CreatePriFilesForPortableLibraries> <Message Importance="low" Text="Created PRI files: @(_PortableLibraryCre atedPriFiles)" /> <ItemGroup> <FileWrites Include="@(_PortableLibraryCreatedPriFiles)" /> </ItemGroup> </Target> <!-- Get list of PRI files from the payload. --> <Target Name="_GetPriFilesFromPayload" Condition="'$(AppxPackage)' == 'true'" > <ItemGroup> <_PriFilesFromPayloadRaw Include="@(PackagingOutputs)" Condition="'%(Extension)' == '.pri' and '%(ProjectName)' != '$(ProjectNa me)'" /> <_PriFilesFromPayloadRaw Include="@(PackagingOutputs)" Condition="'%(Extension)' == '.pri' and '%(ProjectName)' == '$(ProjectNa me)' and '%(OutputGroup)' != 'ProjectPriF ile'" /> </ItemGroup> <RemoveDuplicatePriFiles Inputs="@(_PriFilesFromPayloadRaw)"> <Output TaskParameter="Filtered" ItemName="_PriFilesFromPayload" /> </RemoveDuplicatePriFiles> </Target> <!-- Compute final list of input PRI files. --> <Target Name="_ComputeInputPriFiles" Condition="'$(AppxPackage)' == 'true'" > <ItemGroup> <_PriFile Include="@(_PriFilesFromPayload)" /> <_PriFile Include="@(_PortableLibraryCreatedPriFiles)" /> </ItemGroup> </Target> <!-- Generates configuration files for makepri.exe. --> <Target Name="_GenerateProjectPriConfigurationFiles" Inputs="$(MSBuildProjectFullPath);@(_PriFile)" Outputs="$(_PriConfigXmlPath);$(_LayoutResfilesPath);$(_ResourcesRes filesPath);$(_PriResfilesPath)" > <ItemGroup> <_LayoutFile Include="@(PackagingOutputs)" Condition="'%(OutputGroup )' == 'ContentFilesProjectOutputGroup' and '%(ProjectName)' == '$(ProjectName)'" />

<_LayoutFile Include="@(PackagingOutputs)" Condition="'%(OutputGroup )' == 'CustomOutputGroupForPackaging' and '%(ProjectName)' == '$(ProjectName)'" /> </ItemGroup> <GeneratePriConfigurationFiles PriConfigXmlPath="$(_PriConfigXmlPath)" LayoutResfilesPath="$(_LayoutResfilesPath )" ResourcesResfilesPath="$(_ResourcesResfil esPath)" PriResfilesPath="$(_PriResfilesPath)" LayoutFiles="@(_LayoutFile)" PRIResourceFiles="@(PRIResource)" PriFiles="@(_PriFile)" DefaultResourceLanguage="$(DefaultResourc eLanguage)" PriInitialPath="$(AppxPriInitialPath)" > <Output TaskParameter="IntermediateFileWrites" ItemName="FileWrites" /> </GeneratePriConfigurationFiles> <Message <Message <Message <Message </Target> <!-- Calculate inputs for _GenerateProjectPriFileCore. --> <Target Name="_CalculateInputsForGenerateProjectPriFileCore"> <ItemGroup> <_GenerateProjectPriFileCoreInput Include="$(_PriConfigXmlPath)" /> <_GenerateProjectPriFileCoreInput Include="$(_LayoutResfilesPath)" / > <_GenerateProjectPriFileCoreInput Include="$(_ResourcesResfilesPath) " /> <_GenerateProjectPriFileCoreInput <_GenerateProjectPriFileCoreInput <_GenerateProjectPriFileCoreInput <_GenerateProjectPriFileCoreInput </ItemGroup> </Target> Include="$(_PriResfilesPath)" /> Include="@(PRIResource)" /> Include="@(_PriFile)" /> Include="@(SourceAppxManifest)" /> Text="$(MSBuildProjectName) Text="$(MSBuildProjectName) Text="$(MSBuildProjectName) Text="$(MSBuildProjectName) -> -> -> -> $(_PriConfigXmlPath)" /> $(_LayoutResfilesPath)" /> $(_ResourcesResfilesPath)" /> $(_PriResfilesPath)" />

<!-- Generates intermediate PRI file for the current project. --> <Target Name="_GenerateProjectPriFileCore" Inputs="@(_GenerateProjectPriFileCoreInput)" Outputs="$(ProjectPriFullPath)" > <GetMakepriExeFullPath MakePriExeFullPath="$(MakePriExeFullPath)" Condition="'$(_ActualMakePriExeFullPath)' == ''" > <Output TaskParameter="ActualMakePriExeFullPath" PropertyName="_Actu alMakePriExeFullPath" /> </GetMakepriExeFullPath> <GenerateProjectPriFile MakePriExeFullPath="$(_ActualMakePriExeFullPath) " PriConfigXmlPath="$(_PriConfigXmlPath)"

SecondPassIndexFile="$(_ResourcesResfilesPath)" ProjectPriIndexName="$(ProjectPriIndexName)" ProjectDirectory="$(ProjectDir)" OutputFileName="$(ProjectPriFullPath)" LanguageQualifiersPath="$(_LanguageQualifiersPat h)" AdditionalMakepriExeParameters="$(AppxGeneratePr ojectPriFileAdditionalMakepriExeParameters)" /> <Message Text="$(MSBuildProjectName) -> $(ProjectPriFileName)" /> </Target> <!-- Add FileReads and FileWrites done during generation of project PRI file . --> <Target Name="_AddFileReadsAndFileWritesForProjectPri"> <ItemGroup> <FileReads Include="@(_GenerateProjectPriFileCoreInput)" /> </ItemGroup> <ItemGroup> <FileWrites <FileWrites <FileWrites <FileWrites <FileWrites <FileWrites </ItemGroup> </Target> <!--Create ProjectPriFile item. --> <Target Name="_CreateProjectPriFileItem" Condition="'$(AppxPackage)' == 'true'" > <ItemGroup> <ProjectPriFile Include="$(ProjectPriFullPath)"> <TargetPath>$(ProjectPriFileName)</TargetPath> </ProjectPriFile> </ItemGroup> </Target> <!-- Expand content of PRI files. --> <Target Name="_ExpandPriFiles"> <ItemGroup> <_PriFilesToExpand Include="@(_PriFilesFromPayload)" Condition="'%(OutputGroup)' != 'ProjectPriFile' and '%(OutputGroup)' != 'SDKRedistOutputGr oup'" /> </ItemGroup> <GetMakepriExeFullPath MakePriExeFullPath="$(MakePriExeFullPath)" Condition="'$(_ActualMakePriExeFullPath)' == ''" > Include="$(_PriConfigXmlPath)" /> Include="$(_LayoutResfilesPath)" /> Include="$(_ResourcesResfilesPath)" /> Include="$(_PriResfilesPath)" /> Include="$(ProjectPriFullPath)" /> Include="$(_LanguageQualifiersPath)" />

<Output TaskParameter="ActualMakePriExeFullPath" PropertyName="_Actu alMakePriExeFullPath" /> </GetMakepriExeFullPath> <ExpandPriContent Inputs="@(_PriFilesToExpand)" MakePriExeFullPath="$(_ActualMakePriExeFullPath)" IntermediateDirectory="$(IntermediateOutputPath)" AdditionalMakepriExeParameters="$(AppxExpandPriContent AdditionalMakepriExeParameters)" > <Output TaskParameter="Expanded" ItemName="_ExpandedPriPayload" /> <Output TaskParameter="IntermediateFileWrites" ItemName="FileWrites" /> </ExpandPriContent> </Target> <!-- Override to specify actions to happen after generating project PRI file . --> <Target Name="AfterGenerateProjectPriFile" /> <PropertyGroup> <_ProjectArchitecturesFilePath>$(IntermediateOutputPath)ProjectArchitect ures.txt</_ProjectArchitecturesFilePath> </PropertyGroup> <!-- ======================================================================= =========================== --> <!-- Computes Appx package payload that will be included in the appx package (excluding Appx manifest). --> <!-- ======================================================================= =========================== --> <Target Name="_ComputeAppxPackagePayload" Condition="'$(AppxPackage)' == 'true'" > <ItemGroup> <_UnfilteredAppxPackagePayload Include="@(PackagingOutputs)" Conditi on="'%(Extension)' != '.pri' AND '%(OutputGroup)' != 'GetResolvedSDKReferences' AND '%(OutputGroup)' != '_GetProjectArchitecture'"/> <_UnfilteredAppxPackagePayload Include="@(_ExpandedPriPayload)" /> <_UnfilteredAppxPackagePayload Include="@(ProjectPriFile)" /> </ItemGroup> <RemoveDuplicatePayload Inputs="@(_UnfilteredAppxPackagePayload)"> <Output TaskParameter="Filtered" ItemName="AppxPackagePayload" /> </RemoveDuplicatePayload> <ItemGroup> <PDBPayload Include="@(AppxPackagePayload)" Condition="'%(Extension) '=='.pdb'" /> </ItemGroup> <!-If packaging outputs contain file named AppxManifest.xml, this is override manifest and it is handled elsewhere. --> <ItemGroup> <AppxPackagePayload Remove="@(AppxPackagePayload)" Condition="'%(Tar

getPath)' == 'AppxManifest.xml'" /> </ItemGroup> <ItemGroup> <_ProjectArchitectureFromPayload Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Outp utGroup)' == '_GetProjectArchitecture' AND '%(PackagingOutputs.MSBu ildSourceProjectFile)' != ''" /> <_ProjectArchitectureFromPayload Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Outp utGroup)' == '_GetProjectArchitecture' AND '%(PackagingOutputs.MSBu ildSourceProjectFile)' == ''" > <MSBuildSourceProjectFile>$(MSBuildProjectFullPath)</MSBuildSour ceProjectFile> </_ProjectArchitectureFromPayload> </ItemGroup> <GenerateProjectArchitecturesFile ProjectArchitectures="@(_ProjectArchitectureFromPayload)" ProjectArchitecturesFilePath="$(_ProjectArchitecturesFilePath)" /> <ItemGroup> <FileWrites Include="$(_ProjectArchitecturesFilePath)" /> </ItemGroup> </Target> <!-- ======================================================================= ============= --> <!-- Generating Appx manifest. --> <!-- Happens after generating PRI file, for every project which can be packa ged/deployed. --> <!-- ======================================================================= ============= --> <PropertyGroup> <_GenerateAppxManifestDependsOn> $(_GenerateAppxManifestDependsOn); BeforeGenerateAppxManifest; _GetRecursiveResolvedSDKReferences; _CopyCurrentProjectAppxManifestOverride; _CalculateInputsForGenerateCurrentProjectAppxManifest; _GenerateCurrentProjectAppxManifest; _CreateFinalAppxManifestItem; _FindStoreAssociationFile; _ValidateAppxManifest; AfterGenerateAppxManifest </_GenerateAppxManifestDependsOn> </PropertyGroup> <Target Name="_GenerateAppxManifest" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(_GenerateAppxManifestDependsOn)" />

<!-- Override to specify actions to happen before generating Appx manifest. --> <Target Name="BeforeGenerateAppxManifest" /> <!-- Extract SDK references from the payload and filters out duplicates. --> <Target Name="_GetRecursiveResolvedSDKReferences"> <ItemGroup> <_UnfilteredRecursiveResolvedSDKReference Include="@(PackagingOutput s)" Condition="'%(OutputGroup) ' == 'GetResolvedSDKReferences'" /> </ItemGroup> <RemoveDuplicateSDKReferences Inputs="@(_UnfilteredRecursiveResolvedSDKR eference)"> <Output TaskParameter="Filtered" ItemName="RecursiveResolvedSDKRefer ence" /> </RemoveDuplicateSDKReferences> <ItemGroup> <FrameworkSdkReference Include="@(RecursiveResolvedSDKReference)" Condition="'%(RecursiveResolvedSDKReference.F rameworkIdentity)' != ''" /> </ItemGroup> <ItemGroup> <NonFrameworkSdkReference Include="@(RecursiveResolvedSDKReference)" Condition="'%(RecursiveResolvedSDKReferenc e.FrameworkIdentity)' == ''" /> </ItemGroup> <!-- Add non-framework SDK versions to manifest build metadata. --> <ItemGroup> <AppxManifestMetadata Include="@(NonFrameworkSdkReference)"> <Name>%(NonFrameworkSdkReference.SimpleName)</Name> <Version>%(NonFrameworkSdkReference.Version)</Version> </AppxManifestMetadata> </ItemGroup> <GetFrameworkSdkPackages FrameworkSdkReferences="@(FrameworkSdkReference )"> <Output TaskParameter="FrameworkSdkPackages" ItemName="FrameworkSdkP ackage" /> </GetFrameworkSdkPackages> </Target> <!-- Copy overriden AppxManifest.xml to final location. --> <!-- Inputs: [CustomAppxManifest] Name of the manifest file override. --> <!-- Outputs: [FinalAppxManifest] Final manifest file which will be included in the appx package. --> <Target Name="_CopyCurrentProjectAppxManifestOverride" Condition="Exists(@(CustomAppxManifest))" Inputs="@(CustomAppxManifest)" Outputs="$(FinalAppxManifestName)">

<Copy UseHardlinksIfPossible="$(AppxUseHardlinksIfPossible)" SkipUnchangedFiles="$(AppxSkipUnchangedFiles)" SourceFiles="@(CustomAppxManifest)" DestinationFiles="$(FinalAppxManifestName)" /> </Target> <!-- Calculates list of input for _GenerateCurrentProjectAppxManifest target . --> <Target Name="_CalculateInputsForGenerateCurrentProjectAppxManifest"> <ItemGroup Condition="'$(AppxHarvestWinmdRegistration)' == 'true'"> <_WinmdFilesFromWinmdArtifacts Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extensio n)' == '.winmd' and '%(PackagingOutputs.OutputGr oup)' == 'CopyWinmdArtifactsOutputGroup' and '%(PackagingOutputs.ProjectN ame)' != '$(ProjectName)'" /> <_WinmdFilesFromReferences Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.winmd' and '%(PackagingOutputs.OutputGroup) ' == 'CopyLocalFilesOutputGroup'" /> <_WinmdFilesFromOtherGroups Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.winmd' and '%(PackagingOutputs.OutputGroup )' != 'CopyWinmdArtifactsOutputGroup' and '%(PackagingOutputs.OutputGroup )' != 'CopyLocalFilesOutputGroup' and '%(PackagingOutputs.ResolvedFro m)' != 'GetSDKReferenceFiles'" /> <_WinmdFilesFromSDKs Include="@(PackagingOutputs)" Condition="'%(PackagingOutputs.Extension)' == '.w inmd' and '%(PackagingOutputs.ResolvedFrom)' == 'GetSDKReferenceFiles'" /> </ItemGroup> <RemoveDuplicatePayload Inputs="@(_WinmdFilesFromWinmdArtifacts)"> <Output TaskParameter="Filtered" ItemName="_AppxWinmdFilesToHarvest" /> </RemoveDuplicatePayload> <RemoveDuplicatePayload Inputs="@(_WinmdFilesFromReferences)"> <Output TaskParameter="Filtered" ItemName="_AppxWinmdFilesToHarvest" /> </RemoveDuplicatePayload> <RemoveDuplicatePayload Inputs="@(_WinmdFilesFromOtherGroups)"> <Output TaskParameter="Filtered" ItemName="_AppxWinmdFilesToHarvest" /> </RemoveDuplicatePayload> <RemoveDuplicatePayload Inputs="@(_WinmdFilesFromSDKs)"> <Output TaskParameter="Filtered" ItemName="_AppxSDKWinmdFilesForHarv est" /> </RemoveDuplicatePayload>

<ItemGroup> <_GenerateCurrentProjectAppxManifestInput Include="@(AppxManifest)" /> <_GenerateCurrentProjectAppxManifestInput Include="$(AppxManifestSch ema)" /> <_GenerateCurrentProjectAppxManifestInput ateKeyFile)" /> <_GenerateCurrentProjectAppxManifestInput ToHarvest)" /> <_GenerateCurrentProjectAppxManifestInput lesForHarvest)" /> <_GenerateCurrentProjectAppxManifestInput iersPath)" /> </ItemGroup> </Target> <!-- Generates a final AppxManifest.xml that will be included in the appx pa ckage. --> <!-- The generation includes pre-processing of any tokens in the input manif est file to produce a valid appx manifest file. --> <!-- Input: [AppxManifest] Name of the manifest file template. --> <!-- Output: [FinalAppxManifest] Final manifest file which will be included in the appx package. --> <Target Name="_GenerateCurrentProjectAppxManifest" Condition="Exists(@(AppxManifest))" Inputs="$(MSBuildAllProjects);@(_GenerateCurrentProjectAppxManifestI nput)" Outputs="$(FinalAppxManifestName)"> <GetMakepriExeFullPath MakePriExeFullPath="$(MakePriExeFullPath)" Condition="'$(_ActualMakePriExeFullPath)' == ''" > <Output TaskParameter="ActualMakePriExeFullPath" PropertyName="_Actu alMakePriExeFullPath" /> </GetMakepriExeFullPath> <ItemGroup> <AppxManifestMetadata Include="$(_ActualMakePriExeFullPath)" /> </ItemGroup> <GenerateAppxManifest AppxManifestInput="@(AppxManifest)" AppxManifestOutput="$(FinalAppxManifestName)" ApplicationExecutableName="$(TargetName)" FrameworkSdkReferences="@(FrameworkSdkReference)" NonFrameworkSdkReferences="@(NonFrameworkSdkRefere nce)" CertificateThumbprint="$(PackageCertificateThumbpr int)" CertificateFile="$(PackageCertificateKeyFile)" DefaultResourceLanguage="$(DefaultResourceLanguage )" LanguageQualifiersPath="$(_LanguageQualifiersPath) " PackageArchitecture="$(PackageArchitecture)" SDKWinmdFiles="@(_AppxSDKWinmdFilesForHarvest)" WinmdFiles="@(_AppxWinmdFilesToHarvest)" ManagedWinmdInprocImplementation="$(ManagedWinmdIn Include="$(PackageCertific Include="@(_AppxWinmdFiles Include="@(_AppxSDKWinmdFi Include="$(_LanguageQualif

procImplementation)" OSMinVersion="$(AppxOSMinVersion)" OSMaxVersionTested="$(AppxOSMaxVersionTested)" OSMinVersionReplaceManifestVersion="$(AppxOSMinVer sionReplaceManifestVersion)" OSMaxVersionTestedReplaceManifestVersion="$(AppxOS MaxVersionTestedReplaceManifestVersion)" EnableSigningChecks="$(EnableSigningChecks)" ManifestMetadata="@(AppxManifestMetadata)" /> <Message Importance="low" Text="@(AppxManifest) -> $(FinalAppxManifestNa me)" /> </Target> <!-- In <!-- we <!-- in <Target order for incremental build and clean to work correctly, --> are creating build item @(FinalAppxManifest) and @(FileWrites) --> the target which always executes. --> Name="_CreateFinalAppxManifestItem">

<ItemGroup> <FinalAppxManifest Include="$(FinalAppxManifestName)" /> </ItemGroup> <ItemGroup> <FileReads Include="@(CustomAppxManifest)"/> <FileReads Include="@(_GenerateCurrentProjectAppxManifestInput)"/> </ItemGroup> <ItemGroup> <FileWrites Include="@(FinalAppxManifest)"/> </ItemGroup> </Target> <!-- Finds store association file. --> <Target Name="_FindStoreAssociationFile"> <ItemGroup Condition="'@(StoreAssociationFile)' == ''"> <StoreAssociationFile Include="@(None)" Condition="'%(Identity)' == 'Package.StoreAssociation.xml'" /> <None Remove="@(None)" Condition="'%(Identity)' == 'Package.StoreAss ociation.xml'" /> </ItemGroup> </Target> <!-- Validates final Appx manifest. --> <Target Name="_ValidateAppxManifest" Condition="'$(AppxValidateAppxManifest)' == 'true'" > <ValidateAppxManifest Input="@(FinalAppxManifest)" SourceAppxManifest="@(SourceAppxManifest)" AppxManifestSchema="$(AppxManifestSchema)" StoreAssociationFile="@(StoreAssociationFile)" OSMinVersion="$(AppxOSMinVersion)" OSMaxVersionTested="$(AppxOSMaxVersionTested)" ValidateWinmds="$(_CustomAppxManifestUsed)"

StrictManifestValidationEnabled="$(AppxStrictManif estValidationEnabled)" WinmdFiles="@(_AppxWinmdFilesToHarvest)" SDKWinmdFiles="@(_AppxSDKWinmdFilesForHarvest)" NonFrameworkSdkReferences="@(NonFrameworkSdkRefere nce)" ManagedWinmdInprocImplementation="$(ManagedWinmdIn procImplementation)" /> </Target> <!-- Override to specify actions to happen after generating Appx manifest. -> <Target Name="AfterGenerateAppxManifest" /> <!-- ======================================================================= ================== --> <!-- Generating Appx package recipe. --> <!-- Happens after generating Appx manifest, for every project which can be packaged/deployed. --> <!-- ======================================================================= ================== --> <!-- Ensure Fast UpToDate check also consider the .appxrecipe file as an out put --> <ItemGroup Condition="'$(AppxPackage)' == 'true'"> <UpToDateCheckOutput Include="$(AppxPackageRecipe)" /> </ItemGroup> <PropertyGroup> <_GenerateAppxPackageRecipeDependsOn> $(_GenerateAppxPackageRecipeDependsOn); _CalculateInputsForGenerateAppxPackageRecipe; _GenerateAppxPackageRecipeFile; _FileReadsAndWritesForGenerateAppxPackageRecipe </_GenerateAppxPackageRecipeDependsOn> </PropertyGroup> <Target Name="_GenerateAppxPackageRecipe" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(_GenerateAppxPackageRecipeDependsOn)" /> <!-- Creates the recipe file for the the appx package --> <Target Name="_CalculateInputsForGenerateAppxPackageRecipe"> <ItemGroup> <_GenerateAppxPackageRecipeInput Include="@(FinalAppxManifest)" /> <_GenerateAppxPackageRecipeInput Include="@(AppxPackagePayload)" /> <_GenerateAppxPackageRecipeInput Include="$(_ProjectArchitecturesFil ePath)" /> </ItemGroup> </Target> <!-- Creates the recipe file for the the appx package --> <Target Name="_GenerateAppxPackageRecipeFile" Inputs="$(MSBuildAllProjects);@(_GenerateAppxPackageRecipeInput)" Outputs="$(AppxPackageRecipe)">

<GenerateAppxPackageRecipe AppxManifestXml="%(FinalAppxManifest.FullPath)" SourceAppxManifest="@(SourceAppxManifest)" SolutionConfiguration="$(Configuration)|$(Platform)" PayloadFiles="@(AppxPackagePayload)" FrameworkSdkPackages="@(FrameworkSdkPackage)" RecipeFile="$(AppxPackageRecipe)" SystemBinaries="@(AppxSystemBinary)" ReservedFileNames="@(AppxReservedFileName)" QueryNamespacePrefix="$(AppxManifestQueryNamespacePrefix)" ManifestFileNameQueries="@(AppxManifestFileNameQuery)" ManifestImageFileNameQueries="@(AppxManifestImageFileNameQuery)" PackageArchitecture="$(PackageArchitecture)" /> <Message Importance="low" Text="Manifest: %(FinalAppxManifest.Identity)" /> <Message Importance="low" Text="Payload: %(AppxPackagePayload.TargetPath ) from %(AppxPackagePayload.FullPath)" /> <Message Importance="low" Text="SDK reference: %(RecursiveResolvedSDKRef erence.TargetPath) from %(RecursiveResolvedSDKReference.FullPath)" /> <Message Importance="low" Text="$(MSBuildProjectName) -> $(AppxPackageRe cipe)" /> </Target> <!-- Add FileReads and FileWrites done during generation of package recipe f ile. --> <Target Name="_FileReadsAndWritesForGenerateAppxPackageRecipe"> <ItemGroup> <FileReads Include="@(_GenerateAppxPackageRecipeInput)" /> </ItemGroup> <ItemGroup> <FileWrites Include="$(AppxPackageRecipe)"/> </ItemGroup> </Target> <!-- ======================================================================= ============= --> <!-- Creates a .tlog file from the FileReads items so that up-to-date check works in C++. --> <!-- ======================================================================= ============= --> <Target Name="_AppendToReadTlogFile" Condition="'$(Language)' == 'C++' and '@(FileReads)' != ''"> <WriteLinesToFile File="$(TLogLocation)$(ProjectName).read.1.tlog" Lines="^$(ProjectPath);@(FileReads-&gt;'%(Fullpath)')" /> </Target> <!-- ======================================================================= ===== --> <!-- Creates a .tlog file from the FileWrites items so Clean target works in C++. --> <!-- =======================================================================

===== --> <Target Name="_AppendToWriteTlogFile" Condition="'$(Language)' == 'C++' and '@(FileWrites)' != ''"> <WriteLinesToFile File="$(TLogLocation)$(ProjectName).write.1.tlog" Lines="^$(ProjectPath);@(FileWrites-&gt;'%(Fullpath)')" /> </Target> <!-<!-<!-<!-=============================== Generating Appx package. Happens when invoked explictly. =============================== --> --> --> -->

<PropertyGroup> <_GenerateAppxPackageBaseDependsOn> _ComputeAppxPackageOutput; _ExtractHashUri; _ValidateAppxPackage; _GenerateAppxPackageFile; _GenerateAppxSymbolPackage; _SignAppxPackage; _CreateAppStoreContainer; _CreateTestLayout </_GenerateAppxPackageBaseDependsOn> <_GenerateAppxPackageDependsOn Condition="'$(GenerateAppxPackageOnBuild) ' == 'true'"> $(_GenerateAppxPackageDependsOn); $(_GenerateAppxPackageBaseDependsOn); </_GenerateAppxPackageDependsOn> <_GenerateAppxPackageDependsOn Condition="'$(GenerateAppxPackageOnBuild) ' != 'true'"> $(_GenerateAppxPackageDependsOn); Build; $(_GenerateAppxPackageBaseDependsOn); </_GenerateAppxPackageDependsOn> </PropertyGroup> <Target Name="_GenerateAppxPackage" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(_GenerateAppxPackageDependsOn)" /> <!-- Computes Appx package output (file name and directory). --> <Target Name="_ComputeAppxPackageOutput"> <PropertyGroup Condition="'$(AppxPackageName)' == ''"> <_AppxPackageConfiguration Condition="'$(Configuration)' != 'Release '">_$(Configuration)</_AppxPackageConfiguration> <AppxPackageName>$(ProjectName)_$(AppxManifestIdentityVersion)_$(Pla tform)$(_AppxPackageConfiguration)</AppxPackageName> </PropertyGroup> <PropertyGroup Condition="'$(AppxStoreContainer)' == ''"> <AppxStoreContainer>$(AppxPackageDir)$(AppxPackageName).appxupload</ AppxStoreContainer> </PropertyGroup> <PropertyGroup Condition="'$(AppxPackageTestDir)' == ''">

<AppxPackageTestDir>$(AppxPackageDir)$(AppxPackageName)_Test\</AppxP ackageTestDir> </PropertyGroup> <PropertyGroup Condition="'$(AppxPackageOutput)' == ''"> <AppxPackageOutput>$(AppxPackageTestDir)$(AppxPackageName).appx</App xPackageOutput> </PropertyGroup> <PropertyGroup Condition="'$(AppxSymbolPackageOutput)' == ''"> <AppxSymbolPackageOutput>$(AppxPackageTestDir)$(AppxPackageName).app xsym</AppxSymbolPackageOutput> </PropertyGroup> </Target> <!-- Extracts hash URI from store association file. --> <Target Name="_ExtractHashUri" Condition="'$(AppxPackageValidationEnabled)' == 'true' and '@(StoreA ssociationFile)' != ''"> <ExtractHashUri StoreAssociationFile="@(StoreAssociationFile)"> <Output TaskParameter="HashUri" PropertyName="_HashUri" /> </ExtractHashUri> </Target> <!-- Executes pre-upload validation of the appx package. --> <Target Name="_ValidateAppxPackage" Condition="'$(AppxPackageValidationEnabled)' == 'true'"> <ValidateAppxPackage SourceAppxManifest="@(SourceAppxManifest)" AppxManifest="@(FinalAppxManifest)" StoreAssociationFile="@(StoreAssociationFile)" PackageArchitecture="$(PackageArchitecture)" AppxPackagePayload="@(AppxPackagePayload)" QueryNamespacePrefix="$(AppxManifestQueryNamespacePrefix)" ManifestImageFileNameQueries="@(AppxManifestImageFileNameQuery)" ResolvedSDKReferences="@(RecursiveResolvedSDKReference)" AllowDebugFrameworkReferencesInManifest="$(AppxPackageAllowDebugFram eworkReferencesInManifest)" /> </Target> <!-- The following target the appx package. --> <Target Name="_GenerateAppxPackageFile" Inputs="$(MSBuildAllProjects);@(FinalAppxManifest);@(AppxPackagePayl oad)" Outputs="$(AppxPackageOutput)"> <ItemGroup Condition="'$(AppxPackageIncludePrivateSymbols)' != 'true'"> <AppxPackagePayload Remove="@(AppxPackagePayload)" Condition="'%(Ext ension)' == '.pdb'" /> </ItemGroup> <PropertyGroup Condition="'$(_HashUri)' == ''"> <_HashUri>$(AppxDefaultHashUri)</_HashUri> </PropertyGroup>

<GenerateAppxPackage AppxManifestXml="@(FinalAppxManifest)" SourceFiles="@(AppxPackagePayload)" HashUri="$(_HashUri)" OutputPath="$(AppxPackageOutput)"> <Output TaskParameter="OutputPath" PropertyName="FinalAppxPackage" / > <Output TaskParameter="OutputPath" ItemName="FinalAppxPackageItem" / > </GenerateAppxPackage> <ItemGroup> <FileWrites Include="@(FinalAppxPackageItem)" /> </ItemGroup> <WriteLinesToFile File="$(AppxPackagingInfoFile)" Overwrite="true" Lines="$(FinalAppxPackage)" /> <ItemGroup> <FileWrites Include="$(AppxPackagingInfoFile)" /> </ItemGroup> <Message Importance="high" Text="$(MSBuildProjectName) -> $(FinalAppxPac kage)" /> </Target> <!-- The following target the appx package. --> <Target Name="_GenerateAppxSymbolPackage" Condition="'$(AppxSymbolPackageEnabled)' == 'true' and '@(PDBPayload )' != ''" Inputs="$(MSBuildAllProjects);@(PDBPayload);@(FinalAppxManifest)" Outputs="$(AppxSymbolPackageOutput)"> <GenerateAppxSymbolPackage PdbCopyExeFullPath="$(PdbCopyExeFullPath)" PDBFiles="@(PDBPayload)" ProjectName="$(MSBuildProjectName)" IntermediateDirectory="$(IntermediateOutputPa th)" AppxSymbolPackageOutput="$(AppxSymbolPackageO utput)"> <Output TaskParameter="StrippedPdbs" ItemName="StrippedPDBFiles" /> </GenerateAppxSymbolPackage> <ItemGroup> <FinalAppxSymbolPackageItem Include="$(AppxSymbolPackageOutput)" /> </ItemGroup> <ItemGroup> <FileWrites Include="@(FinalAppxSymbolPackageItem)" /> <FileWrites Include="@(StrippedPDBFiles)" /> </ItemGroup> <Message Importance="low" Text="$(MSBuildProjectName) -> $(AppxSymbolPac kageOutput)" /> </Target> <!-- Signs appx package -->

<Target Name="_SignAppxPackage" Condition="'$(AppxPackageSigningEnabled)' == 'true'"> <PropertyGroup Condition="'$(_HashUri)' == ''"> <_HashUri>$(AppxDefaultHashUri)</_HashUri> </PropertyGroup> <SignAppxPackage AppxPackageToSign="@(FinalAppxPackageItem)" CertificateThumbprint="$(PackageCertificateThumbprint)" CertificateFile="$(PackageCertificateKeyFile)" HashUri="$(_HashUri)" EnableSigningChecks="$(EnableSigningChecks)" > <Output TaskParameter="ResolvedThumbprint" PropertyName="ResolvedThu mbPrint"/> <Output TaskParameter="AppxPackagePublicKeyFile" PropertyName="AppxP ackagePublicKeyFile" /> </SignAppxPackage> <Message Importance="low" Text="ResolvedThumbprint -> $(ResolvedThumbpri nt)" /> </Target> <!-- Creates a test layout for testing of the appx package. --> <Target Name="_CreateTestLayout" Condition="'$(AppxTestLayoutEnabled)' == 'true'"> <ItemGroup> <_TestLayoutSourceFiles Condition="'%(Architecture)' == 'neutral'" I nclude="@(FrameworkSdkPackage)" /> <_TestLayoutTargetFiles Condition="'%(Architecture)' == 'neutral'" I nclude="@(FrameworkSdkPackage->'$(AppxPackageTestDir)Dependencies\%(FileName)%(E xtension)')" /> </ItemGroup> <ItemGroup> <_TestLayoutSourceFiles Condition="'%(Architecture)' != 'neutral'" I nclude="@(FrameworkSdkPackage)" /> <_TestLayoutTargetFiles Condition="'%(Architecture)' != 'neutral'" I nclude="@(FrameworkSdkPackage->'$(AppxPackageTestDir)Dependencies\%(Architecture )\%(FileName)%(Extension)')" /> </ItemGroup> <Message Importance="low" Text="Test Layout: %(_TestLayoutTargetFiles.Fu llPath)" /> <Copy UseHardlinksIfPossible="$(AppxUseHardlinksIfPossible)" SkipUnchangedFiles="$(AppxSkipUnchangedFiles)" SourceFiles="@(_TestLayoutSourceFiles)" DestinationFiles="@(_TestLayoutTargetFiles)" /> <ItemGroup> <FileWrites Include="@(_TestLayoutTargetFiles)"/> </ItemGroup> <ItemGroup> <_PowerShellScriptsSource Include="$(AppxMSBuildToolsPath)Add-AppDev

Package.ps1" /> <_PowerShellScriptsSource Include="$(AppxMSBuildToolsPath)**\Add-App DevPackage.psd1" /> </ItemGroup> <ItemGroup> <_PowerShellScriptsDestination Include="@(_PowerShellScriptsSource-> '$(AppxPackageTestDir)%(RecursiveDir)%(FileName)%(Extension)')" /> </ItemGroup> <!--Copy install scripts to app package location.--> <Copy UseHardlinksIfPossible="$(AppxUseHardlinksIfPossible)" SkipUnchangedFiles="true" SourceFiles="@(_PowerShellScriptsSource)" DestinationFiles="@(_PowerShellScriptsDestination)" ContinueOnError="true" /> <ItemGroup> <FileWrites Include="@(_PowerShellScriptsDestination)" /> </ItemGroup> </Target> <!-- Creates .appxupload file containing .appx and optional .appxsym, --> <!-- which is used for uploading to Windows App Store. --> <Target Name="_CreateAppStoreContainer" Inputs="@(FinalAppxPackageItem);@(FinalAppxSymbolPackageItem)" Outputs="$(AppxStoreContainer)"> <ItemGroup> <!-- create temp item just to use .FullPath --> <_AppxStoreContainer Include="$(AppxStoreContainer)" /> </ItemGroup> <CreateAppStoreContainer Items="@(FinalAppxPackageItem);@(FinalAppxSymbolPackageItem)" ProjectName="$(MSBuildProjectName)" OutputPath="%(_AppxStoreContainer.FullPath)" /> <ItemGroup> <FileWrites Include="$(AppxStoreContainer)"/> </ItemGroup> </Target> <!-- =============================== --> <!-- Clean/Rebuild support. --> <!-- =============================== --> <PropertyGroup> <_CleanAppxPackageDependsOn> $(_CleanAppxPackageDependsOn); </_CleanAppxPackageDependsOn> <_CleanAppxPackageDependsOn Condition=" '$(GenerateAppxPackageOnBuild)' == 'true' "> $(_CleanAppxPackageDependsOn); _ValidatePresenceOfAppxManifestItems; _ComputeAppxPackageOutput;

</_CleanAppxPackageDependsOn> </PropertyGroup> <!-- Cleans current project and any referenced projects' appx package artifa cts. --> <Target Name="_CleanAppxPackage" Condition="'$(AppxPackage)' == 'true' and '$(GenerateAppxPackageOnBu ild)' == 'true'" DependsOnTargets="$(_CleanAppxPackageDependsOn)" AfterTargets="Clean"> <!-- Delete package output. --> <Delete Files="$(AppxStoreContainer)" ContinueOnError="true" TreatErrors AsWarnings="true" /> <RemoveDir Directories="$(AppxPackageTestDir)" ContinueOnError="true" /> </Target> <!-- Rebuild appx package target and entry point. --> <Target Name="_RebuildAppxPackage" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(CleanPackageAction);$(PackageAction)" /> <!-- ========================================== --> <!-- Returns Architecture for given Platform. --> <!-- ========================================== --> <Target Name="_GetProjectArchitecture" Returns="@(ProjectArchitecture)"> <PropertyGroup> <_ProjectArchitectureOutput>Invalid</_ProjectArchitectureOutput> <_ProjectArchitectureOutput Condition="'$(Platform)' == 'AnyCPU'">ne utral</_ProjectArchitectureOutput> <_ProjectArchitectureOutput Condition="'$(Platform)' == 'x86'">x86</ _ProjectArchitectureOutput> <_ProjectArchitectureOutput Condition="'$(Platform)' == 'Win32'">x86 </_ProjectArchitectureOutput> <_ProjectArchitectureOutput Condition="'$(Platform)' == 'x64'">x64</ _ProjectArchitectureOutput> <_ProjectArchitectureOutput Condition="'$(Platform)' == 'arm'">arm</ _ProjectArchitectureOutput> </PropertyGroup> <ItemGroup> <ProjectArchitecture Include="$(_ProjectArchitectureOutput)" /> </ItemGroup> </Target> <!-<!-<!-<!-========================================== Getting all packaging outputs. Returns items that packaging targets need. ========================================== --> --> --> -->

<PropertyGroup> <GetPackagingOutputsDependsOn> $(GetPackagingOutputsDependsOn); AssignProjectConfiguration;

_SplitProjectReferencesByFileExistence </GetPackagingOutputsDependsOn> </PropertyGroup> <Target Name="GetPackagingOutputs" Returns="@(PackagingOutputs)" DependsOnTargets="$(GetPackagingOutputsDependsOn)"> <CallTarget Targets="BuiltProjectOutputGroup" Condition="'$(IncludeBuilt ProjectOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_BuiltProjectOutputG roupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="%(_BuiltProjectOutputGroupOutp ut.FinalOutputPath)"> <TargetPath>%(_BuiltProjectOutputGroupOutput.TargetPath)</Target Path> <OutputGroup>BuiltProjectOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="DebugSymbolsProjectOutputGroup" Condition="'$(Inclu deDebugSymbolsProjectOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_DebugSymbolsProject OutputGroupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="%(_DebugSymbolsProjectOutputGr oupOutput.FinalOutputPath)"> <OutputGroup>DebugSymbolsProjectOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="DocumentationProjectOutputGroup" Condition="'$(Incl udeDocumentationProjectOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_DocumentationProjec tOutputGroupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_DocumentationProjectOutputG roupOutput)"> <OutputGroup>DocumentationProjectOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="SatelliteDllsProjectOutputGroup" Condition="'$(Incl udeSatelliteDllsProjectOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_SatelliteDllsProjec tOutputGroupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_SatelliteDllsProjectOutputG roupOutput)"> <OutputGroup>SatelliteDllsProjectOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded>

</ItemGroup> <CallTarget Targets="SourceFilesProjectOutputGroup" Condition="'$(Includ eSourceFilesProjectOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_SourceFilesProjectO utputGroupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_SourceFilesProjectOutputGro upOutput)"> <OutputGroup>SourceFilesProjectOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="SGenFilesOutputGroup" Condition="'$(IncludeSGenFile sOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_SGenFilesOutputGrou pOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_SGenFilesOutputGroupOutput) "> <OutputGroup>SGenFilesOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="CopyLocalFilesOutputGroup" Condition="'$(IncludeCop yLocalFilesOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_CopyLocalFilesOutpu tGroupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_CopyLocalFilesOutputGroupOu tput)"> <OutputGroup>CopyLocalFilesOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="ComFilesOutputGroup" Condition="'$(IncludeComFilesO utputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_ComFilesOutputGroup Output"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_ComFilesOutputGroupOutput)" > <OutputGroup>ComFilesOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="CopyWinmdArtifactsOutputGroup" Condition="'$(Includ eCopyWinmdArtifactsOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_CopyWinmdArtifactsO utputGroupOutput"/> </CallTarget> <ItemGroup>

<_PackagingOutputsUnexpanded Include="@(_CopyWinmdArtifactsOutputGro upOutput)"> <OutputGroup>CopyWinmdArtifactsOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="SDKRedistOutputGroup" Condition="'$(IncludeSDKRedis tOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_SDKRedistOutputGrou pOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_SDKRedistOutputGroupOutput) "> <OutputGroup>SDKRedistOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="PriFilesOutputGroup" Condition="'$(IncludePriFilesO utputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_PriFilesOutputGroup Output"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_PriFilesOutputGroupOutput)" > <OutputGroup>PriFilesOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="ContentFilesProjectOutputGroup" Condition="'$(Inclu deContentFilesProjectOutputGroup)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_ContentFilesProject OutputGroupOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_ContentFilesProjectOutputGr oupOutput)"> <OutputGroup>ContentFilesProjectOutputGroup</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> <TargetPath Condition="'$(AppxPackage)' != 'true'">$(AppxPriInit ialPath)\%(_ContentFilesProjectOutputGroupOutput.TargetPath)</TargetPath> </_PackagingOutputsUnexpanded> </ItemGroup> <CallTarget Targets="CustomOutputGroupForPackaging" Condition="'$(Includ eCustomOutputGroupForPackaging)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_CustomOutputGroupFo rPackagingOutput"/> </CallTarget> <ItemGroup> <_PackagingOutputsUnexpanded Include="@(_CustomOutputGroupForPackagi ngOutput)"> <OutputGroup>CustomOutputGroupForPackaging</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> <TargetPath Condition="'$(AppxPackage)' != 'true'">$(AppxPriInit ialPath)\%(_CustomOutputGroupForPackagingOutput.TargetPath)</TargetPath>

</_PackagingOutputsUnexpanded> </ItemGroup> <ExpandPayloadDirectories Inputs="@(_PackagingOutputsUnexpanded)"> <Output TaskParameter="Expanded" ItemName="_PackagingOutputsExpanded " /> </ExpandPayloadDirectories> <CallTarget Targets="GetResolvedSDKReferences" Condition="'$(IncludeGetR esolvedSDKReferences)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_GetResolvedSDKRefer encesOutputWithoutMetadata"/> </CallTarget> <ItemGroup> <_GetResolvedSDKReferencesOutput Include="@(_GetResolvedSDKReference sOutputWithoutMetadata)"> <OutputGroup>GetResolvedSDKReferences</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_GetResolvedSDKReferencesOutput> </ItemGroup> <CallTarget Targets="_GetProjectArchitecture"> <Output TaskParameter="TargetOutputs" ItemName="_ProjectArchitecture " /> </CallTarget> <ItemGroup> <_ProjectArchitectureItem Include="@(_ProjectArchitecture)"> <OutputGroup>_GetProjectArchitecture</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> </_ProjectArchitectureItem> </ItemGroup> <ItemGroup> <ProjectPriFile Include="$(ProjectPriFullPath)"> <OutputGroup>ProjectPriFile</OutputGroup> <ProjectName>$(ProjectName)</ProjectName> <TargetPath>$(ProjectPriFileName)</TargetPath> </ProjectPriFile> </ItemGroup> <PropertyGroup> <_ContinueOnError Condition="'$(BuildingProject)' == 'true'">true</_ ContinueOnError> <_ContinueOnError Condition="'$(BuildingProject)' != 'true'">false</ _ContinueOnError> </PropertyGroup> <MSBuild Projects="@(ProjectReferenceWithConfiguration)" Targets="GetPackagingOutputs" BuildInParallel="$(BuildInParallel)" Properties="%(ProjectReferenceWithConfiguration.SetConfiguration); %(P rojectReferenceWithConfiguration.SetPlatform)" Condition="'@(ProjectReferenceWithConfiguration)' != '' and '%(ProjectReferenceWithConfiguration.BuildReference)' == 't rue' and '%(ProjectReferenceWithConfiguration.ReferenceOutputAssembl y)' == 'true'" ContinueOnError="$(_ContinueOnError)">

<Output TaskParameter="TargetOutputs" ItemName="_PackagingOutputsFro mOtherProjects"/> </MSBuild> <ItemGroup> <PackagingOutputs <PackagingOutputs <PackagingOutputs <PackagingOutputs <PackagingOutputs </ItemGroup> Include="@(ProjectPriFile)" /> Include="@(_PackagingOutputsExpanded)" /> Include="@(_GetResolvedSDKReferencesOutput)" /> Include="@(_PackagingOutputsFromOtherProjects)" /> Include="@(_ProjectArchitectureItem)" />

<Message Text="$(ProjectName) : %(PackagingOutputs.ProjectName).%(Packag ingOutputs.OutputGroup) : %(PackagingOutputs.Identity) -> %(PackagingOutputs.Tar getPath)" /> </Target> <!-- ============================== --> <!-- Getting package architecture. --> <!-- ============================== --> <PropertyGroup> <_GetPackagePropertiesDependsOn> $(_GetPackagePropertiesDependsOn); _GetProjectArchitecture; _GetRecursiveProjectArchitecture; _GetPackageArchitecture; _GetDefaultResourceLanguage; </_GetPackagePropertiesDependsOn> </PropertyGroup> <!-- Gets some package properties. --> <Target Name="_GetPackageProperties" DependsOnTargets="$(_GetPackagePropertiesDependsOn)" /> <!-- Extract Project Architecture from the payload --> <Target Name="_GetRecursiveProjectArchitecture"> <ItemGroup> <_RecursiveProjectArchitecture Include="@(PackagingOutputs)" Conditi on="'%(OutputGroup)' == '_GetProjectArchitecture'" /> <_RecursiveProjectArchitecture Remove="@(_RecursiveProjectArchitectu re)" Condition="'%(ProjectName)' == '$(ProjectName)'" /> </ItemGroup> </Target> <!-- Gets package architecture. --> <Target Name="_GetPackageArchitecture"> <GetPackageArchitecture Platform="$(Platform)" ProjectArchitecture="@(ProjectArchitecture)" RecursiveProjectArchitecture="@(_RecursiveProjectArchitecture)" > <Output TaskParameter="PackageArchitecture" PropertyName="PackageArc hitecture" /> </GetPackageArchitecture>

</Target> <!-- Gets default resource language for the package. --> <Target Name="_GetDefaultResourceLanguage"> <GetDefaultResourceLanguage DefaultLanguage="$(DefaultLanguage)" SourceAppxManifest="@(SourceAppxManifest)" > <Output TaskParameter="DefaultResourceLanguage" PropertyName="Defaul tResourceLanguage" /> </GetDefaultResourceLanguage> </Target> <!-- ====================== --> <!-- Project output groups. --> <!-- ====================== --> <!-- Targets that all output groups defined in this targets depends on. --> <PropertyGroup> <AllOutputGroupsDependsOn> $(AllOutputGroupsDependsOn) BuildOnlySettings; PrepareForBuild; AssignTargetPaths; ResolveReferences </AllOutputGroupsDependsOn> </PropertyGroup> <!-- ======================================= --> <!-- Output group including CopyLocal files. --> <!-- ======================================= --> <PropertyGroup> <CopyLocalFilesOutputGroupDependsOn> $(CopyLocalFilesOutputGroupDependsOn); $(AllOutputGroupsDependsOn) </CopyLocalFilesOutputGroupDependsOn> </PropertyGroup> <Target Name="CopyLocalFilesOutputGroup" DependsOnTargets="$(CopyLocalFilesOutputGroupDependsOn)" Returns="@(CopyLocalFilesOutputGroupOutput)"> <ItemGroup> <CopyLocalFilesOutputGroupOutput Include="@(ReferenceCopyLocalPaths) "> <TargetPath>%(ReferenceCopyLocalPaths.DestinationSubDirectory)%( ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)</TargetPat h> </CopyLocalFilesOutputGroupOutput> </ItemGroup> <!-- In case of Winmd files, we do not get implementation --> <!-- file as separate CopyLocal file (if exist), so we are --> <!-- extracting it here. --> <ItemGroup> <_WinmdWithImplementation

Include="@(CopyLocalFilesOutputGroupOutput)" Condition="'%(CopyLocalFilesOutputGroupOutput.Extension)' == '.w inmd' AND '%(CopyLocalFilesOutputGroupOutput.Filename)' != 'pla tform' AND '%(CopyLocalFilesOutputGroupOutput.Implementation)' ! = ''" /> </ItemGroup> <ItemGroup> <CopyLocalFilesOutputGroupOutput Include="%(_WinmdWithImplementation .RootDir)%(_WinmdWithImplementation.Directory)%(_WinmdWithImplementation.Impleme ntation)"> <TargetPath>%(_WinmdWithImplementation.DestinationSubDirectory)% (_WinmdWithImplementation.Implementation)</TargetPath> </CopyLocalFilesOutputGroupOutput> </ItemGroup> </Target> <!-- =========================================== --> <!-- Output group including COM reference files. --> <!-- =========================================== --> <PropertyGroup> <ComFilesOutputGroupDependsOn> $(ComFilesOutputGroupDependsOn); $(AllOutputGroupsDependsOn) </ComFilesOutputGroupDependsOn> </PropertyGroup> <Target Name="ComFilesOutputGroup" DependsOnTargets="$(ComFilesOutputGroupDependsOn)" Returns="@(ComFilesOutputGroupOutputs)"> <ItemGroup> <ComFilesOutputGroupOutputs Include="@(ReferenceComWrappersToCopyLoc al)" > <TargetPath>%(ReferenceComWrappersToCopyLocal.Filename)%(Referen ceComWrappersToCopyLocal.Extension)</TargetPath> </ComFilesOutputGroupOutputs> <ComFilesOutputGroupOutputs Include="@(ResolvedIsolatedComModules)" > <TargetPath>%(ResolvedIsolatedComModules.Filename)%(ResolvedIsol atedComModules.Extension)</TargetPath> </ComFilesOutputGroupOutputs> <ComFilesOutputGroupOutputs Include="@(NativeReferenceFile)" > <TargetPath>%(NativeReferenceFile.Filename)%(NativeReferenceFile .Extension)</TargetPath> </ComFilesOutputGroupOutputs> </ItemGroup> </Target> <!-- ============================================ --> <!-- Output group including Winmd artifact files. --> <!-- ============================================ --> <PropertyGroup>

<CopyWinmdArtifactsOutputGroupDependsOn> $(CopyWinmdArtifactsOutputGroupDependsOn); $(AllOutputGroupsDependsOn) </CopyWinmdArtifactsOutputGroupDependsOn> </PropertyGroup> <Target Name="CopyWinmdArtifactsOutputGroup" DependsOnTargets="$(CopyWinmdArtifactsOutputGroupDependsOn)" Returns="@(CopyWinmdArtifactsOutputGroupOutputs)"> <ItemGroup> <CopyWinmdArtifactsOutputGroupOutputs Include="@(FinalWinmdExpArtifa cts ->'%(FullPath)')"> <TargetPath>%(FinalWinmdExpArtifacts.DestinationSubDirectory)%(F inalWinmdExpArtifacts.Filename)%(FinalWinmdExpArtifacts.Extension)</TargetPath> </CopyWinmdArtifactsOutputGroupOutputs> </ItemGroup> </Target> <!-- ===================== --> <!-- Prepare layout target --> <!-- ===================== --> <PropertyGroup> <PrepareLayoutDependsOn> $(PrepareLayoutDependsOn); BeforePrepareLayout; _PrepareLayout; AfterPrepareLayout </PrepareLayoutDependsOn> </PropertyGroup> <!-- Prepares layout for debbuging/launching. --> <Target Name="PrepareLayout" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(PrepareLayoutDependsOn)" /> <!-- Implement BeforePrepareLayout to influence final APPX layout recipe con tent. --> <!-- Here one can specify these additional items: --> <!-- (TODO: final extensibility items list and names - depending how much In ternalPrepareLayout recognize) --> <!---> <!-@(AppxAdditionalPackageContent) --> <!-@(AppxAdditionalSDKDependencies) --> <!-@(AppxAdditionalPRI) --> <!-@(AppxAdditionalWinmd) --> <!---> <Target Name="BeforePrepareLayout" />

<!-- Internal prepare layout target. --> <Target Name="_PrepareLayout" Inputs="$(AppxPackageRecipe)" Outputs="$(FinalAppxPackageRecipe)"> <!-- TODO: PRI and Winmd merge steps will be moved here --> <Copy UseHardlinksIfPossible="false" SourceFiles="$(AppxPackageRecipe)" DestinationFiles="$(FinalAppxPackageRecipe)" /> </Target> <!-- Implement AfterPrepareLayout if needed to modify layout in more custom way. --> <!-- Here one can do arbitraty changes to $(FinalAppxPackageRecipe) --> <Target Name="AfterPrepareLayout" /> <!-- ====================== --> <!-- Register layout target --> <!-- ====================== --> <PropertyGroup> <RegisterAppxLayoutDependsOn> $(RegisterAppxLayoutDependsOn); PrepareLayout </RegisterAppxLayoutDependsOn> </PropertyGroup> <Target Name="RegisterAppxLayout" Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(RegisterAppxLayoutDependsOn)"> <CreateAppxLayout AppxRecipe="$(FinalAppxPackageRecipe)" LayoutDir="$(LayoutDir)" IgnoreLocalNetworkLoopback="$(IgnoreLocalNetworkLoopback)" AllowLocalNetworkLoopback="$(AllowLocalNetworkLoopback)" Incremental="$(UseIncrementalAppxRegistration)"> <Output TaskParameter="PackageFullName" PropertyName="PackageFullNam e"/> <Output TaskParameter="FirstAppUserModelId" PropertyName="FirstAppUs erModelId"/> </CreateAppxLayout> </Target> <!-- ======================== --> <!-- Unregister layout target --> <!-- ======================== --> <PropertyGroup> <UnRegisterAppxLayoutDependsOn> $(UnRegisterAppxLayoutDependsOn); </UnRegisterAppxLayoutDependsOn> </PropertyGroup> <Target Name="UnRegisterAppxLayout"

Condition="'$(AppxPackage)' == 'true'" DependsOnTargets="$(UnRegisterAppxLayoutDependsOn)"> <UnregisterAppx LayoutDir="$(LayoutDir)" /> </Target> </Project>

You might also like