Right now I'm working on a Azure DevOps Building Pipeline and got stuck at manipulating the generated Package.appxmanifest in a way I need it.
What I have:
<Package>
<Capabilities>
<uap2:Capability Name="spatialPerception" />
</Capabilities>
</Package>
What I need:
<Package>
<Capabilities>
<uap2:Capability Name="spatialPerception" />
<rescap:Capability Name="perceptionSensorsExperimental" />
</Capabilities>
</Package>
I tried to create an Element
, add an Attribute
to it and then add the Element
as child to the Capabilities
. But this generates wrong stuff. For example:
PowerShell #1:
$newElement = $manifest.Package.Capabilities.AppendChild($manifest.CreateElement("rescap:Capability"))
$newElement.SetAttribute(“Name”,”perceptionSensorsExperimental”)
Generates #1:
<Package>
<Capabilities>
<uap2:Capability Name="spatialPerception" />
<Capability Name="perceptionSensorsExperimental" xmlns="" />
</Capabilities>
</Package>
How can I create the mentioned line, consisting of rescap:Capability
and the attribute Name="perceptionSensorsExperimental"
?
--Edit
Initial Package.appxmanifest
document in its entirety:
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
xmlns:mobile="http://schemas.microsoft.com/appx/manifest/mobile/windows10"
ignorableNamespaces="uap uap2 uap3 uap4 mp mobile iot rescap"
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
<Identity Name="XXXX" Publisher="CN=XXXX" Version="1.0.0.0" />
<Properties>
<DisplayName>XXXX</DisplayName>
<PublisherDisplayName>XXXXX</PublisherDisplayName>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.22621.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="XXXX.App">
<uap:VisualElements DisplayName="XXXXX" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="XXXX" BackgroundColor="transparent">
<uap:DefaultTile ShortName="XXXX" Wide310x150Logo="Assets\Wide310x150Logo.png" />
<uap:SplashScreen Image="Assets\SplashScreen.png" BackgroundColor="#FFFFFF" />
<uap:InitialRotationPreference>
<uap:Rotation Preference="landscape" />
<uap:Rotation Preference="landscapeFlipped" />
<uap:Rotation Preference="portrait" />
<uap:Rotation Preference="portraitFlipped" />
</uap:InitialRotationPreference>
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<Capability Name="internetClientServer" />
<Capability Name="privateNetworkClientServer" />
<uap:Capability Name="sharedUserCertificates" />
<uap2:Capability Name="spatialPerception" />
<DeviceCapability Name="webcam" />
<DeviceCapability Name="microphone" />
<DeviceCapability Name="gazeinput" />
</Capabilities>
</Package>
When you use
.CreateElement()
to create the new node, there is a third parameter you can give it, which is the url taken from thexmlns:rescap
declarationBy using that, things should work as wanted:
Result (shortened)