Showing ClickOnce deployment version on WPF application

為{幸葍}努か 提交于 2019-12-21 03:39:22

问题


I'm deploying now a WPF c# project and want to put the clickonce version (rather than the assymbly or product version) on the screen title. I used to do it in Win form application with the following way. But it seems that it is not the way in WPF applications. I search on Google bu didn't find anything. Please help.

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

回答1:


Try this:

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



回答2:


What error do you get? There's no difference in the ClickOnce API's between Windows Forms and WPF. It is not dependent upon any UI framework.

Did you remember to add a reference to System.Deployment.dll?




回答3:


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;
        }
    }
}

If you get an error about System.Deployment.Application, then Solution > Project > References > Add Reference > Assemblies > Framework > System.Deployment.

Do not parse the assembly XML for this information; you're relying on undocumented behaviour which simply happens to work 'for now'.




回答4:


OK, I found the problem. I had to add reference to System.Deployment That is why I couldn't use it. This dll is for winforms also.




回答5:


This solution is similar to @Engin, but uses 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;


来源:https://stackoverflow.com/questions/4591368/showing-clickonce-deployment-version-on-wpf-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!