C# ClickOnce:“未设置应用程序标识”

C# ClickOnce:“未设置应用程序标识”,c#,deployment,installation,clickonce,C#,Deployment,Installation,Clickonce,我有一个非常旧的应用程序,我目前正在尝试为它构建ClickOnce安装程序 一切正常,但从应用程序中访问ApplicationDeployment.CurrentDeployment的任何尝试都会导致: 未设置应用程序标识 我在web上发现了很多此类帖子,尤其是在StackOverflow上,但人们在调试器下运行应用程序,或者干脆不使用网络部署的本地版本 我强调,在我的例子中,应用程序是网络部署的,可以脱机使用。我通过单击ClickOnce安装程序创建的桌面图标来运行它。Update works

我有一个非常旧的应用程序,我目前正在尝试为它构建ClickOnce安装程序

一切正常,但从应用程序中访问ApplicationDeployment.CurrentDeployment的任何尝试都会导致:

未设置应用程序标识

我在web上发现了很多此类帖子,尤其是在StackOverflow上,但人们在调试器下运行应用程序,或者干脆不使用网络部署的本地版本

我强调,在我的例子中,应用程序是网络部署的,可以脱机使用。我通过单击ClickOnce安装程序创建的桌面图标来运行它。Update works fine尝试发布更新以确保其正常工作

但是,ApplicationDeployment.CurrentDeployment不可访问

我做错了什么

事实上,我只是试图读取程序和功能小程序中显示的应用程序版本。有没有一种方法可以不使用ClickOnce API直接从注册表读取这些信息?我知道这不好

代码非常简单:

[STAThread]
static void Main(string[] argv)
{
System.Windows.Forms.MessageBox.Show(ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString()); // Crash here
DoSomethingUseful();
}

我使用一个属性完成了这项工作,并将其值直接绑定到中。我正在使用WPF,但我希望这能有所帮助

private string _verSion = ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
public string verion
{
    get
    {
        return _verSion;
    }
    set
    {
        _verSion = value;
        OnPropertyChanged(() => verion);
    }
}

我没有使用消息框完成此操作。你也可以试试。打开一扇关于我们的窗户。获取一个字符串并将其绑定到此属性。

您应该检查应用程序是否已通过网络部署!即使你认为这不是你的问题。只是为了最佳实践而这样做。只是为了添加到@Herdo comment的参考。ApplicationDeployment.IsNetworkDeployed