2011-01-04 13 views
13

Estoy implementando ahora un proyecto WPF C# y quiero poner clickonce versión (en lugar de la versión del producto o assymbly) en el título de la pantalla. Solía ​​hacerlo en la aplicación de formulario Win de la siguiente manera. Pero parece que no es el camino en las aplicaciones de WPF. Busco en Google bu no encontré nada. Por favor ayuda.Mostrando la versión de despliegue de ClickOnce en la aplicación WPF

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

Respuesta

3

OK, Encontré el problema. Tuve que agregar referencia a System.Deployment Es por eso que no pude usarlo. Este dll es para winforms también.

6

¿Qué error obtienes? No hay diferencia en la API de ClickOnce entre Windows Forms y WPF. No depende de ningún marco de UI.

¿Recordó agregar una referencia a System.Deployment.dll?

+0

Gracias, Ver mi respuesta. – Igal

+0

¡esto debe marcarse como respuesta! – Muds

23

Prueba esto:

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); 
} 
+1

funciona, gracias – asktomsk

+0

Creo que Assembly.GetEntryAssembly() funciona mejor – itstata

0

Esta solución es similar a @Engin, pero utiliza 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; 
2
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; 
     } 
    } 
} 

Si recibe un error acerca de System.Deployment.Application, a continuación, la solución> Proyecto> Referencias> Agregar referencia> ensamblajes> Marco> System.Deployment.

Do no analice el XML del ensamblaje para esta información; confía en un comportamiento no documentado que simplemente funciona 'por ahora'.

Cuestiones relacionadas