2015-05-28 2 views
0

Я пытаюсь внести изменения в манифест развертывания ClickOnce. Одна вещь, которую мне нужно сделать, это настроить манифест для развертывания значка на рабочем столе. Для этого вам нужно добавить атрибут createDesktopShortcut с истинным значением для узла развертывания.Требовать префикс пространства имен xml для атрибута в дочернем узле

Например, это фрагмент рабочего файла развертывания (есть некоторые незначительные изменения).

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" 
       manifestVersion="1.0" 
       xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
       xmlns="urn:schemas-microsoft-com:asm.v2" 
       xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
       xmlns:xrml="urn:mpeg:mpeg21:2003:01-REL-R-NS" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" 
       xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" 
       xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" 
       xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2"> 
    <assemblyIdentity name="My.app" version="1.2.3.4" publicKeyToken="redacted" language="neutral" processorArchitecture="x86" xmlns="urn:schemas-microsoft-com:asm.v1" /> 
    <deployment trustURLParameters="true" install="true" 
       minimumRequiredVersion="1.2.3.4" 
       co.v1:createDesktopShortcut="true"> 
    <subscription> 
     <update> 
     <beforeApplicationStartup /> 
     </update> 
    </subscription> 
    <deploymentProvider codebase="redacted" /> 
    </deployment> 
</asmv1:assembly> 

Обратите внимание, что атрибут «createDesktopShortcut» с префиксом пространства имен co.v1 Этот префикс, как представляется, требуется, однако, если вы пытаетесь использовать Power Shell для создания этого элемента будет добавить его без префикса, что делает xml недействительным.

[xml]$DeploymentManifest = Get-Content -Path $DeploymentPath 
$DeploymentManifest.assembly.SetAttribute("xmlns:co.v1", "urn:schemas-microsoft-com:clickonce.v1") 
$DeploymentManifest.assembly.deployment.SetAttribute('co.v1:createDesktopShortcut', 
                 'true') 

Это приводит к следующему тегу развертывания:

<deployment trustURLParameters="true" install="true" 
      minimumRequiredVersion="1.2.3.4" 
      createDesktopShortcut="true" > 

Это было бы хорошо, однако ClickOnce не может показаться, чтобы обработать этот атрибут без префикса. Любое руководство в любом направлении относительно того, почему это происходит или как я могу чисто обойти его, оценили.

+0

Я просто хочу, чтобы рекомендовать против ручной модификации ClickOnce манифеста развертывания. Это создает множество проблем. После большой работы я вернулся к гораздо более стандартному подходу, и его работа стала намного понятнее. Чтобы быть понятным, это было частью процесса переноса сертификата на SHA256 для продукта, ориентированного на машины .NET 4.0, что создает ряд проблем. –

ответ

1

Я не совсем уверен, почему это не работает. Кажется, что это противоречит документации для метода SetAttribute. Однако использование другой перегрузки SetAttribute или SetAttributeNode действительно работало для меня.

через SetAttribute:

$DeploymentManifest.assembly.deployment.SetAttribute('createDesktopShortcut', 'urn:schemas-microsoft-com:clickonce.v1', 'true') 

или через SetAttributeNode:

$att = $DeploymentManifest.assembly.deployment.SetAttributeNode('createDesktopShortcut', 'urn:schemas-microsoft-com:clickonce.v1') 
$att.Value = 'true' 

и выход:

<deployment trustURLParameters="true" 
    install="true" 
    minimumRequiredVersion="1.2.3.4" 
    co.v1:createDesktopShortcut="true"> 
Смежные вопросы