2011-01-04 16 views
13

Wdrażam teraz projekt WPF C# i chcę umieścić na ekranie tytuł (zamiast wersji Assymbly lub Product). Zrobiłem to w aplikacji Win aplikacji w następujący sposób. Wydaje się jednak, że nie jest tak w aplikacjach WPF. Szukam w Google bu nic nie znalazłem. Proszę pomóż.Pokazywanie wersji wdrażania ClickOnce na aplikacji WPF

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

Odpowiedz

3

OK, Znalazłem problem. Musiałem dodać odniesienie do System.Deployment Dlatego nie mogłem go użyć. Ta biblioteka jest również dla winformów.

6

Jaki błąd dostałeś? Nie ma różnicy w API ClickOnce między Windows Forms i WPF. Nie jest zależny od żadnej struktury interfejsu użytkownika.

Czy pamiętasz, aby dodać odniesienie do System.Deployment.dll?

+0

Dzięki, zobacz moją odpowiedź. – Igal

+0

należy to zaznaczyć jako odpowiedź! – Muds

23

Spróbuj tego:

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

działa, dziękuję – asktomsk

+0

Myślę, że Assembly.GetEntryAssembly() działa lepiej – itstata

0

Rozwiązanie to jest podobne do @Engin, ale używa 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; 
     } 
    } 
} 

Jeśli pojawi się błąd o System.Deployment.Application, następnie Rozwiązanie> Projekt> Referencje> Add Reference Framework> konfekcjonowane>> System.Deployment.

Dokonaj nie parsuj zespół XML dla tych informacji; polegasz na nieudokumentowanym zachowaniu, które po prostu działa "na razie".

Powiązane problemy