2015-05-28 93 views
0

我正在嘗試修改ClickOnce部署清單。 我需要做的一件事就是設置清單,將圖標部署到桌面。 爲此,您需要將具有true值的createDesktopShortcut屬性添加到Deployment節點。在子節點上的屬性上需要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 這個前綴似乎是必需的,但是如果你試圖使用電源外殼來創建這個元素,將它添加不帶前綴,使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方法的文檔相矛盾。但是使用SetAttributeSetAttributeNode的其他超載對我來說確實有效。

通過的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"> 
相關問題