问题
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