自动更新版本号

我想为每个构建增加应用程序的版本属性,但我不确定如何在Visual Studio(2005/2008)中启用此功能。我试图将AssemblyVersion指定为1.0 *,但它并不能完全满足我的要求。

我也在使用一个设置文件,而在之前的尝试中,当程序集版本更改我的设置时,由于应用程序在另一个目录中查找设置文件而重置为默认设置。

我希望能够以1.1.38的形式显示版本号,因此当用户发现问题时,我可以记录他们正在使用的版本,并告诉他们如果他们有旧版本,就升级。

对版本工作如何的简短解释也将被赞赏。构建版本和修订版本号何时增加?

0
额外 编辑
意见: 1
下面的问题提供了一个简单的方便的解决方案,通过在构建事件中生成一个源文件来将内部版本号注入到应用程序中。 stackoverflow.com/questions/4450231/…
额外 作者 Ashley Davis,
额外 作者 Michael Freidgeim,

11 答案

According to Wikipedia: "[Game Boy's] monochrome screen, lack of a backlight, and less powerful hardware" is at the root of the problem.

9
额外
哇,当我阅读文章时,我设法完全浏览了这一点。
额外 作者 Joshua McKinnon,
另外,在分辨率相同的情况下,Gear的屏幕更大(3.2英寸和2.6英寸),这可能也起到了作用。
额外 作者 André Paramés,

世嘉Game Gear的电池续航时间差是由于屏幕背光造成的。它是一种快速消耗电池的荧光灯管。最近有几个人尝试用LED取代荧光管,这大大延长了电池的使用寿命,从而证明主要的功率消耗来自背光。

5
额外

我的理解是,基本上当时的彩色液晶显示器是巨大的能源消耗。所有其他与原Game Boy竞争的彩色手持设备也遭遇同样的问题。那些提供背光照明的设备也遭受类似的耗电。

我不能评论芯片组的功耗问题,但这可能也是一个问题。

5
额外
我认为背光是最大的罪魁祸首。
额外 作者 Shinrai,

我认为电池的使用寿命与游戏盒的内存分配有关:有时候它很大,但很少玩(例如,刺猬索尼克)。

此外,颜色和电池持续超过5小时是一个笑话。

编辑

我的意思是,在某些游戏中,它使用了大量的墨盒内存,如果它们有很多颜色,它会很快耗尽电池电量:这只是一个关于加载了多少像素,颜色和内存的问题。当游戏变慢时这很容易察觉。

3
额外
我尝试过很多次阅读这个答案,但我仍然不明白你的意思是什么“电池寿命是关于游戏车内存分配有时非常大,但很少在玩”的
额外 作者 Denilson Sá Maia,
我的意思是说,在某些游戏中,有时它会从墨盒中加载一定量的内存,如果分配的颜色很快就会耗尽电池的电量!事实上,有多少像素,颜色和内存会被加载。最容易注意的示例是游戏速度变慢,速度非常缓慢!如果你不明白,现在PM我!编辑:关于减速你会经常在游戏装备的声波1中看到它们!据AllieRX87称其为碰撞检测!
额外 作者 TheAnimeMurder,
hello juppoter很高兴有你参加这个节目!你知道Frauber是超级马里奥64黑客!如果你这样做!告诉他去这个论坛讨论一些黑客!
额外 作者 TheAnimeMurder,
阅读我输入的答案!
额外 作者 TheAnimeMurder,
Hi TheAnimeMurder,欢迎来到游戏!我继续前进,并将第二个答案纳入到这里:如果您想扩大答案,只需点击下面的“编辑”链接即可。
额外 作者 user3389,
我很确定这个答案是不正确的。 ROM存储器的数量不会影响功耗。如果易失性存储器是DRAM,那么功耗与游戏使用的内存量无关。如果它是SRAM,那么消耗将是每个比特改变多少次的函数。但是,它仍然不是大量能源消耗的主要原因。我相信数字电路消耗的电流相对较小,而LCD和背光耗尽的更多(电阻负载)。
额外 作者 Denilson Sá Maia,

使用“内置”的东西,你不能,因为使用1.0。*或1.0.0。*将取代修订和编号与日期/时间戳,这通常也是一个好方法。

有关更多信息,请参阅汇编链接器文档/ v标记。

至于自动递增数字,请使用AssemblyInfo任务:

AssemblyInfo任务

这可以配置为自动增加内部版本号。

有2个问题:

  1. Each of the 4 numbers in the Version string is limited to 65535. This is a Windows Limitation and unlikely to get fixed.
  2. Using with with Subversion requires a small change:

检索版本号非常简单:

Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);

并澄清:在.net或至少在C#中,构建实际上是第三个数字,而不是第四个,因为有些人(例如习惯于Major.Minor.Release.Build的Delphi开发人员)可能会期望。

在.net中,它是Major.Minor.Build.Revision。

0
额外
@Jugglingnutcase - 如果它适用于当前版本的Visual Studio,那么该链接将近乎完美
额外 作者 Kraang Prime,
@Michael Stum:您能否更新 AssemblyInfo任务 中的链接你的答案好吗?对我来说,它没有正确加载。
额外 作者 Matt,
我刚刚发现这个视觉工作室加载项可以做类似的事情: autobuildversion.codeplex.com
额外 作者 jrsconfitto,
@SanuelJackson哈哈!是的,它会的。太糟糕了,我没有跟上我2010年的评论,对不起! :时间和版本的游行让我们都感到悲伤。
额外 作者 jrsconfitto,
这是否意味着在2179年6月4日微软的默认版本号会打破? (2000年后的第65536天)
额外 作者 ThePower,
“AssemblyInfo Task”链接不起作用
额外 作者 Alexandre Cavaloti,

前段时间我写了一个快速而脏的exe文件,它会更新汇编信息中的#版本。{cs / vb} - 我还使用了rxfind.exe(一个简单而强大的基于正则表达式的搜索替换工具)来执行作为构建过程的一部分从命令行更新。其他一些帮助提示:

  1. separate the assemblyinfo into product parts (company name, version, etc.) and assembly specific parts (assembly name etc.). See here
  2. Also - i use subversion, so I found it helpful to set the build number to subversion revision number thereby making it really easy to always get back to the codebase that generated the assembly (e.g. 1.4.100.1502 was built from revision 1502).
0
额外
如果是代码文件(<.cs / .vb),则应该使用T4模板。
额外 作者 BrainSlugs83,

我发现只要在需要产品版本的地方显示上一次构建的日期,就可以使用以下方法:

System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")

而不是尝试从以下类似的东西获取版本:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;

if (attributes.Length > 0)
{
    attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}
0
额外
我认为你的意思是:yyyy.MM.dd.HHmm不是yyyy.MM.dd.HHMM。
额外 作者 JHubbard80,

你使用什么源码控制系统?

几乎所有的人都有某种形式的$ Id $标签,当文件签入时会被展开。

我通常使用某种形式的hackery来显示它作为版本号。

另一种选择是使用日期作为内部版本号:080803-1448

0
额外
你可以扩展:“几乎所有的人都有某种形式的$ Id $标签,当文件被签入时会被扩展”。具体来说,你知道subversiion吗?
额外 作者 Greg B,

VS.NET默认Assembly版本为1.0。*,并在自动递增时使用以下逻辑:它将构建部分设置为自2000年1月1日以来的天数,并将修订部分设置为自午夜以来的秒数,当地时间除以2。请参阅此 MSDN文章

程序集版本位于assemblyinfo.vb或assemblyinfo.cs文件中。从文件中:

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version 
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers 
' by using the '*' as shown below:
'  

 
 
0
额外
感谢您提供初始日期: 2000年1月1日
额外 作者 kiewic,

如果您希望每次编译完成时更新一次自动递增数字,您可以使用 VersionUpdater 预构建事件。如果您愿意,您的预构建事件可以检查构建配置,以便版本号仅针对发布版本(例如)增量。

0
额外
有趣。我已经有了自己多年的同名,并不知道有一个存在(尽管我刚刚把它放在网上): github.com/rjamesnw/VersionUpdater
额外 作者 James Wilkins,

[Visual Studio 2017, .csproj 属性]

要自动更新PackageVersion / Version / AssemblyVersion属性(或任何其他属性),首先创建一个新的 Microsoft.Build.Utilities.Task 类,它将获得当前的内部版本号并发送更新后的数字(我建议为该类创建一个单独的项目)。

我手动更新major.minor数字,但让MSBuild自动更新内部版本号(1.1。 1 ,1.1。 2 ,1.1。 3 等:)

using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;

public class RefreshVersion : Microsoft.Build.Utilities.Task
{
    [Output]
    public string NewVersionString { get; set; }
    public string CurrentVersionString { get; set; } 

    public override bool Execute()
    {       
        Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");

        DateTime d = DateTime.Now;
        NewVersionString = new Version(currentVersion.Major, 
            currentVersion.Minor, currentVersion.Build+1).ToString();
        return true;
    }

}

然后调用您最近创建的MSBuild进程上的任务,在您的.csproj文件中添加下一个代码:

    
...


   
                       
   
   
   

...

 ..
 1.1.4
 ..

当选择Visual Studio Pack项目选项时(只需在Build之前更改为 BeforeTargets =“Build”用于执行任务),将触发RefreshVersion代码以计算新版本号,并且 XmlPoke <�代码>任务将相应地更新您的.csproj属性(是的,它将修改文件)。

在使用NuGet库时,我还通过将下一个构建任务添加到前一个示例中,将包发送到NuGet存储库。



c:\nuget\nuget is where I have the NuGet client (remember to save your NuGet API key by calling nuget SetApiKey or to include the key on the NuGet push call).

以防万一它帮助某人^ _ ^。

0
额外