2011-01-04 17 views
13

私は今WPF C#プロジェクトをデプロイしていて、画面タイトルに(アシンメトリーまたは製品バージョンではなく)Clickonceバージョンを入れたいと考えています。 私はそれを次の方法でWinフォームアプリケーションでやっていました。しかし、それはWPFアプリケーションの方法ではないようです。私はGoogleで何かを見つけられなかった検索します。助けてください。WPFアプリケーションでのClickOnceデプロイメントバージョンの表示

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

答えて

3

OK、 問題が見つかりました。 私は参照を追加しなければならなかったSystem.Deployment それは私がそれを使用できなかった理由です。このdllはwinformsのためのものです。

6

どのようなエラーが表示されますか? ClickOnce APIにはWindowsフォームとWPFの間に違いはありません。 UIフレームワークに依存しません。

System.Deployment.dllへの参照を追加するのを忘れましたか?

+0

ありがとう、私の答えを参照してください。 – Igal

+0

これは答えとしてマークする必要があります! – Muds

23

これを試してみてください:

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

それは、ありがとう、 – asktomsk

+0

私はAssembly.GetEntryAssembly()がより良いと思う – itstata

0

このソリューションは@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; 
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; 
     } 
    } 
} 

あなたがSystem.Deployment.Applicationに関するエラーを取得した場合は、ソリューション>プロジェクト>参考資料>リファレンス>アセンブリ>フレームワーク> System.Deploymentを追加します。

Do この情報のアセンブリXMLを解析します。あなたは単に「今のところ」仕事をしている、文書化されていない行動に頼っています。

関連する問題