C# 如何在文本框中显示发布版本?

C# 如何在文本框中显示发布版本?,c#,C#,目前,每次发布应用程序时,我都会手动更新其版本字段(textbox)。我想知道是否有一种方法可以让我的应用程序从某处获取数据,并将其显示在框中。我正在使用VS2012,我只是不确定如何在C#中实现这一点。下面是我正在谈论的VS2012属性窗口的屏幕截图 新图像: 试试这个: using System.Deployment.Application; public Version AssemblyVersion { get { return Applicatio

目前,每次发布应用程序时,我都会手动更新其版本字段(
textbox
)。我想知道是否有一种方法可以让我的应用程序从某处获取数据,并将其显示在框中。我正在使用VS2012,我只是不确定如何在C#中实现这一点。下面是我正在谈论的VS2012属性窗口的屏幕截图

新图像:

试试这个:

using System.Deployment.Application;

public Version AssemblyVersion 
{
    get
    {
        return ApplicationDeployment.CurrentDeployment.CurrentVersion;
    }
}
然后getter属性的调用者可以取消引用
Major
Minor
Build
Revision
属性,如下所示:

YourVersionTextBox.Text = AssemblyVersion.Major.ToString() + "."
                        + AssemblyVersion.Minor.ToString() + "."
                        + AssemblyVersion.Build.ToString() + "."
                        + AssemblyVersion.Revision.ToString();
LabelVersion.Text = String.Format("Version {0}.{1}",
    Program.Version.Major.ToString(),
    Program.Version.Minor.ToString());

我们还可以使用
System.Version的重载
ToString

using System.Deployment.Application;

public Version AssemblyVersion 
{
    get
    {
        return ApplicationDeployment.CurrentDeployment.CurrentVersion;
    }
}


YourVersionTextBox.Text = AssemblyVersion.ToString(1); // 1 - get only major
YourVersionTextBox.Text = AssemblyVersion.ToString(2); // 1.0 - get only major, minor
YourVersionTextBox.Text = AssemblyVersion.ToString(3); // 1.0.3 - get only major, minor, build
YourVersionTextBox.Text = AssemblyVersion.ToString(4); // 1.0.3.4 - get only major, minor, build, revision

不要忘记检查应用程序是否已网络部署,否则它将无法在调试模式下工作

if (ApplicationDeployment.IsNetworkDeployed)
{
    this.Text = string.Format("Your application name - v{0}",
        ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString(4));
}

如果出现
ApplicationDeployment
错误,则可以尝试以下操作:

对于通过
程序
访问全局版本,请在
程序
类中声明:

private static Version version = new Version(Application.ProductVersion);

public static Version Version
{
    get
    {
        return version;
    }
}
现在您有了
程序。程序中的任何可用版本都可以使用它来获取如下版本信息:

YourVersionTextBox.Text = AssemblyVersion.Major.ToString() + "."
                        + AssemblyVersion.Minor.ToString() + "."
                        + AssemblyVersion.Build.ToString() + "."
                        + AssemblyVersion.Revision.ToString();
LabelVersion.Text = String.Format("Version {0}.{1}",
    Program.Version.Major.ToString(),
    Program.Version.Minor.ToString());

方法1: 你可以用这个

string version = Application.ProductVersion;
并在文本框中显示版本

方法2: 或者,如果您需要单独的版本部分,您可以使用:

System.Version version2 = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
现在你有了这些:

version2.Major;
version2.Minor;
version2.Revision;
version2.Build;
你可以这样使用它们

string versionString= (String.Format("{0}.{1}.{2}.{3}", version2.Major, version2.Minor, version2.Revision, version2.Build));

我尝试了您的建议,但是在try块中,applicationdeployment收到一个错误“system.windows.forms.application不包含applicationdeployment的定义”,即使在包含了“using”部分之后也是如此。您是否在windows窗体项目中引用了
system.Deployment.dll
,这让我感到困惑,因为它一开始就有问题。我在问题中添加了一个图像,它不会让我编译应用程序,哦,只是意识到应用程序是名称空间,使用需要
System.Deployment.application,正在更新答案。此外,您的属性需要返回
Version
而不是
string
,因为
Version
包含要在文本框中复制的
Major
Minor
Build
Revision
属性。
IsNetworkDeployed
返回false。。问题可能是什么?当您在IDE下运行调试版本时,根据定义,您将不会被网络部署,并且
ApplicationDeployment.CurrentDeployment.CurrentVersion
将抛出
System.Deployment.Application.InvalidDeploymentException
,这就是为什么您必须检查
IsNetworkDeployed
。要测试它是否工作,请将其发布到网络,然后部署它!或者,您可以根据@Christos Lytras的回答尝试
Application.ProductVersion
。这是程序集版本,而不是发布版本AssemblyVersion!=部署版本