アセンブリ名と異なるClickOnceパブリッシュ名があります。議論の目的のために、それは "App 6.0"です。プロジェクトのプロパティで設定しました。プログラムの中からこの価値を引き出す方法はありますか?アプリケーション内からClickOnce公開された製品名を入手できますか?
答えて
答えはClickOnce Run at Startupで見つけることができます。基本的には、InPlaceHostingManagerを使用してClickOnceマニフェストを取得し、それを読み取ります。これは非同期メソッドであると私には不具合がありますが、これがこれまでに働いていた唯一の方法です。簡略化は非常に高く評価されています。 DeploymentDescriptionの説明については、Webページを参照してください。
var inPlaceHostingManager = new InPlaceHostingManager(ApplicationDeployment.CurrentDeployment.UpdateLocation, false);
inPlaceHostingManager.GetManifestCompleted += ((sender, e) =>
{
try
{
var deploymentDescription = new DeploymentDescription(e.DeploymentManifest);
string productName = deploymentDescription.Product;
***DoSomethingToYour(productName);***
// - use this later -
//var commandBuilder = new StartMenuCommandBuilder(deploymentDescription);
//string startMenuCommand = commandBuilder.Command;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
}
});
ApplicationDeployment.UpdatedApplicationFullNameプロパティ
これは正解ではありません。私は、Clickonce Publishオプションに入力されているProductNameを探しています。私はマニフェストを使用するソリューションを見つけましたが、それは最もエレガントではありません。 – tofutim
Microsoft.Build.Tasks.v4.0.dll
への参照を追加し、その後、この実行します。
if (null != AppDomain.CurrentDomain.ActivationContext)
{
DeployManifest manifest;
using (MemoryStream stream = new MemoryStream(AppDomain.CurrentDomain.ActivationContext.DeploymentManifestBytes))
{
manifest = (DeployManifest)ManifestReader.ReadManifest("Deployment", stream, true);
}
// manifest.Product has the name you want
}
else
{
// not deployed
}
をDeployManifestも、出版社やSUPPORTURLのようなあなたのマニフェストから他の有用な情報を提供することができます。
これが機能するためのバージョン要件(あれば、.NET FrameworkやVisual Studioなど)は何ですか? –
- 1. ClickOnce公開
'InPlaceHostingManager'は' System.Deployment.dll'にあります。 'DeploymentDescription'はどこにありますか? –
@DaviFiamenghiあなたが探しているクラスはリンク先のコメントにコメントしています。私はそれを含む答えを編集し、レビューを待っている。リンクをたどってクラスのページを検索すると、それを見つけることができます。 – workabyte