C# 如何基于tfs项目内部版本号设置AssemblyInfo.cs?

C# 如何基于tfs项目内部版本号设置AssemblyInfo.cs?,c#,asp.net,tfs,visual-studio-2013,tfsbuild,C#,Asp.net,Tfs,Visual Studio 2013,Tfsbuild,该项目托管在tfs服务器上,我需要访问构建编号,我假设该编号在构建项目时自动生成 我需要检索该版本号并将其显示在网页上,以便QA和测试人员准确地知道他们正在使用哪个版本 我在以下链接中找到了如何创建自定义内部版本号: 但它并没有解决我的问题,因为我没有访问构建定义文件的权限 我正在寻找某种类型的部署后任务,它可以访问构建编号,也可以生成一个构建编号,并可能将其写入一个文件,从中我可以读取它。我不知道这是否有意义,因为这是我第一次在.Net上工作您可以这样做: Assembly assembly

该项目托管在tfs服务器上,我需要访问构建编号,我假设该编号在构建项目时自动生成

我需要检索该版本号并将其显示在网页上,以便QA和测试人员准确地知道他们正在使用哪个版本

我在以下链接中找到了如何创建自定义内部版本号:

但它并没有解决我的问题,因为我没有访问构建定义文件的权限


我正在寻找某种类型的部署后任务,它可以访问构建编号,也可以生成一个构建编号,并可能将其写入一个文件,从中我可以读取它。我不知道这是否有意义,因为这是我第一次在.Net上工作

您可以这样做:

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
或者,如果有多个程序集,则可以使用

Assembly.GetAssembly(typeof(SomeObject))

其中,
SomeObject
在要获取其版本的程序集中声明。

您可以执行以下操作:

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fvi.FileVersion;
或者,如果有多个程序集,则可以使用

Assembly.GetAssembly(typeof(SomeObject))

其中,
SomeObject
在要获取其版本的程序集中声明。

是一个很好的扩展

是一个很好的扩展

多亏了约翰和麦克拉森,我终于实现了它

在我的AssemblyInfo.cs中,我做了以下更改:

之前:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
之后:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
然后,我编写了一个助手类,它可以使用get方法访问AssemblyVersion号

public string GetVersion() 
{
    string version ;
    version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
    return version;
}

因此,每当我调用这个方法时,它都会给我一个字符串,它只不过是我的版本号。

这就是我最终实现它的原因,多亏了John和mclaassen

在我的AssemblyInfo.cs中,我做了以下更改:

之前:

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
之后:

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
然后,我编写了一个助手类,它可以使用get方法访问AssemblyVersion号

public string GetVersion() 
{
    string version ;
    version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
    return version;
}

因此,每当我调用此方法时,它都会给我一个字符串,它只不过是我的版本号。

您最好使用TFS社区构建工具中的TFS版本活动。此工具自动从生成名称中获取版本号,并且可以轻松配置为在get之后和编译之前更新AssemblyInfo.*文件


在所有的工具中,这是最受支持的一个。我觉得其他的都太复杂了。我已经为许多客户在数百个构建中使用了此功能。

您最好使用TFS社区构建工具中的TFS版本活动。此工具自动从生成名称中获取版本号,并且可以轻松配置为在get之后和编译之前更新AssemblyInfo.*文件


在所有的工具中,这是最受支持的一个。我觉得其他的都太复杂了。我已经为许多客户在数百个版本中使用了此功能。

您需要根据版本号在AssemblyInfo.cs中设置程序集文件版本Hi John,我尝试设置“[assembly:AssemblyVersion(“1.0.*”)]和[assembly:AssemblyFileVersion(“1.0.”)]”但它仍然无法自动更新我的版本号,因此我厌倦了使用”[assembly:System.Reflection.AssemblyVersionAttribute(“1.0.*)”它确实在第一次构建时将其更改为一个新值,但在那之后,无论我构建了多少次,它都会吐出相同的值。你认为我哪里出错了?嗨,John,别介意,我让它工作了,再次感谢你的帮助。你应该添加一个答案,说明你是如何让它工作的。你需要在assembly中设置程序集文件版本Info.cs基于版本号hi John,我尝试设置“[assembly:AssemblyVersion(“1.0.*)”和[assembly:AssemblyFileVersion(“1.0.*)”]”但它仍然没有自动更新我的版本号,所以我厌倦了使用“[assembly:System.Reflection.AssemblyVersionAttribute(“1.0.])”它确实在第一次构建时将其更改为一个新值,但之后无论我构建多少次,它都会吐出相同的值。你认为我错在哪里了?嗨,约翰,别介意,我让它工作了,再次感谢你的帮助。你应该添加一个答案,说明你是如何使它工作的。嗨,麦克拉森,谢谢你分享你的知识,a该方法似乎可行,但我无法让我的项目为每个版本吐出一个新的版本值/编号,正如我向John解释的那样,我尝试设置“[assembly:AssemblyVersion(“1.0.*”)]和[assembly:AssemblyFileVersion(“1.0.*”)]””,但它仍然无法自动更新我的版本号,因此我厌倦了使用”[assembly:System.Reflection.AssemblyVersionAttribute(“1.0.*)”它确实在第一次构建时将其更改为一个新值,但之后无论我构建多少次,它都会吐出相同的值。你认为我哪里出了问题?@ahokrudraju嗯,不确定,我以前使用过*方法,它对我有效。也许可以尝试进行重建,看看是否会增加它?嗨,麦克拉森,谢谢分享你的k要知道,这种方法似乎是可行的,但我无法让我的项目为每个构建吐出一个新的版本值/编号,正如我向John解释的那样,我尝试设置“[assembly:AssemblyVersion(“1.0.*”)]和[assembly:AssemblyFileVersion(“1.0.”)]””,但它仍然无法自动更新我的构建编号,因此我厌倦了使用”[assembly:System.Reflection.AssemblyVersionAttribute(“1.0.*)”它确实在第一次构建时将其更改为一个新值,但在那之后,无论我构建多少次,它都会吐出相同的值。你认为我哪里出了问题?@ahokrudraju嗯,不确定,我以前使用过*方法,它对我有效。也许可以尝试进行重建,看看是否会增加它?