Отображение версии развертывания ClickOnce в приложении WPF - PullRequest
13 голосов
/ 04 января 2011

Я сейчас развертываю проект WPF c # и хочу поместить версию clickonce (а не версию сборки или продукта) в заголовок экрана.Я делал это в Win-приложении следующим образом.Но, похоже, дело обстоит иначе в приложениях WPF.Я ищу в Google, но ничего не нашел.Пожалуйста, помогите.

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

Ответы [ 5 ]

23 голосов
/ 07 декабря 2011

Попробуйте это:

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);
}
6 голосов
/ 04 января 2011

Какую ошибку вы получаете? В ClickOnce API нет никакой разницы между Windows Forms и WPF. Он не зависит от какой-либо структуры пользовательского интерфейса.

Вы не забыли добавить ссылку на System.Deployment.dll?

3 голосов
/ 04 января 2011

ОК, я нашел проблему.Мне пришлось добавить ссылку на System.Deployment. Поэтому я не мог ее использовать.Эта dll также для winforms.

2 голосов
/ 24 августа 2016
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;
        }
    }
}

Если вы получаете сообщение об ошибке System.Deployment.Application, тогда Solution> Project> References> Add Reference> Сборки> Framework> System.Deployment.

Do not парситсборка XML для этой информации;вы полагаетесь на недокументированное поведение, которое просто работает на данный момент.

0 голосов
/ 04 февраля 2015

Это решение похоже на @Engin, но использует 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;
...