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!=部署版本