Mostra la versione di distribuzione ClickOnce sull’applicazione WPF

Sto ora distribuendo un progetto c # WPF e voglio inserire la versione clickonce (piuttosto che la versione assurba o del prodotto) sul titolo dello schermo. Lo facevo in Win form application con il seguente modo. Ma sembra che non sia il modo nelle applicazioni WPF. Cerco su Google bu non ho trovato nulla. Per favore aiuto.

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; lblVer.Text = "V" + ad.CurrentVersion.ToString(); } else lblVer.Text = "V" + Application.ProductVersion.ToString(); 

Prova questo:

 public static Version GetPublishedVersion() { XmlDocument xmlDoc = new XmlDocument(); Assembly asmCurrent = System.Reflection.Assembly.GetExecutingAssembly(); string executePath = new Uri(asmCurrent.GetName().CodeBase).LocalPath; xmlDoc.Load(executePath + ".manifest"); string retval = string.Empty; if (xmlDoc.HasChildNodes) { retval = xmlDoc.ChildNodes[1].ChildNodes[0].Attributes.GetNamedItem("version").Value.ToString(); } return new Version(retval); } 

Che errore ottieni? Non c’è differenza nelle API ClickOnce tra Windows Form e WPF. Non dipende da alcun framework UI.

Ti sei ricordato di aggiungere un riferimento a System.Deployment.dll?

OK, ho trovato il problema. Ho dovuto aggiungere un riferimento a System.Deployment Ecco perché non ho potuto usarlo. Questa dll è anche per winforms.

 using System; using System.Deployment.Application; namespace Utils { public class ClickOnce { public static Version GetPublishedVersion() { return ApplicationDeployment.IsNetworkDeployed ? ApplicationDeployment.CurrentDeployment.CurrentVersion : System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; } } } 

Se si riceve un errore su System.Deployment.Application , quindi Soluzione> Progetto> Riferimenti> Aggiungi riferimento> Assiemi> Framework> System.Deployment.

Non analizzare l’XML di assembly per queste informazioni; stai facendo affidamento su comportamenti non documentati che semplicemente funzionano “per ora”.

Questa soluzione è simile a @Engin, ma usa XPath.

 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("..."); XmlNamespaceManager ns = new XmlNamespaceManager(xmlDoc.NameTable); ns.AddNamespace("asmv1", "urn:schemas-microsoft-com:asm.v1"); string xPath = "/asmv1:assembly/asmv1:assemblyIdentity/@version"; XmlNode node = xmlDoc.SelectSingleNode(xPath, ns); string version = node.Value;