我只是想知道如何使用Visual Studio(2005)自动增加我的文件的构建(和版本?).
如果我查找say的属性C:\Windows\notepad.exe
,Version选项卡会显示"File version:5.1.2600.2180".我想在我的dll版本中获得这些很酷的数字,而不是版本1.0.0.0,让我们面对它有点沉闷.
我尝试了一些东西,但它似乎不是开箱即用的功能,或者我只是在寻找错误的地方(像往常一样).
我主要从事网络项目....
我看了两个:
http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
http://www.codeproject.com/KB/dotnet/build_versioning.aspx
我无法相信,做一些事情的努力是标准做法.
编辑: 据我所知,它在VS2005中不起作用(http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx)
在Visual Studio 2008中,以下工作原理.
找到AssemblyInfo.cs文件并找到以下两行:
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
您可以尝试将其更改为:
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.*")]
但是这不会给你想要的结果,你最终会得到1.0.*的产品版本和1.0.0.0的文件版本.不是你想要的!
但是,如果您删除这些行中的第二行并且只有:
[assembly: AssemblyVersion("1.0.*")]
然后编译器将文件版本设置为等于产品版本,您将获得所需的自动增量产品和文件版本的结果.例如1.0.3266.92689
打开AssemblyInfo.cs文件并进行更改
// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")]
至
[assembly: AssemblyVersion("1.0.*")] //[assembly: AssemblyFileVersion("1.0.0.0")]
您可以通过转到项目 - >属性 - >程序集信息在IDE中执行此操作
但是,这只允许您自动增加Assembly版本并将为您提供
程序集文件版本:此字段中不允许使用通配符("*")
如果您尝试在文件版本字段中放置*,请使用消息框.
所以只需打开assemblyinfo.cs并手动完成.
在每个版本中更改版本号的另一个选项是使用MSBuild.Community.Tasks的Version任务.只需下载他们的安装程序,安装它,然后调整以下代码并将其粘贴到您的文件中:.csproj
注意:将StartDate属性调整为您的语言环境.它目前不使用不变文化.
对于2010年1月14日的第三次构建,这将VersionInfo.cs
使用以下内容创建:
[assembly: AssemblyVersion("1.0")] [assembly: AssemblyFileVersion("1.0.14.2")]
然后必须将此文件添加到项目中(通过添加现有项目),并且必须从中删除AssemblyVersion
和AssemblyFileVersion
行AssemblyInfo.cs
.
用于更改版本组件的不同算法在$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm
和版本属性中进行了描述.
我想出了一个类似于基督徒的解决方案,但不依赖于社区MSBuild任务,这对我来说不是一个选项,因为我不想为所有开发人员安装这些任务.
我正在生成代码并编译到程序集并希望自动增加版本号.但是,我无法使用VS 6.0.*AssemblyVersion技巧,因为它每天自动增加内部版本号并破坏与使用旧版本号的程序集的兼容性.相反,我希望有一个硬编码的AssemblyVersion但是一个自动递增的AssemblyFileVersion.我通过在AssemblyInfo.cs中指定AssemblyVersion并在MSBuild中生成这样的VersionInfo.cs来完成此操作,
$([System.DateTime]::Now.ToString("yy")) $([System.DateTime]::Now.ToString("MM")) $([System.DateTime]::Now.ToString("dd")) [assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]
这将生成一个VersionInfo.cs文件,其中包含AssemblyFileVersion的Assembly属性,其中版本遵循具有生成日期的YY.MM.DD.TTTT的模式.您必须在项目中包含此文件并使用它进行构建.
安装Build Version Increment加载项.它为您提供了比*选项更多的控制.
要获取版本号,请尝试
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); System.Reflection.AssemblyName assemblyName = assembly.GetName(); Version version = assemblyName.Version;
要设置版本号,请创建/编辑AssemblyInfo.cs
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.*")]
另外作为旁注,第三个数字是自2000年2月1日以来的天数,第四个数字是当天总秒数的一半.所以如果你在午夜编译它应该是零.
有一个visual studio扩展自动版本,支持Visual Studio 2012,2013,2015和2017.
屏幕截图
如其他帖子中所述,在AssemblyInfo或项目属性中的版本号中设置*不适用于所有版本的Visual Studio/.NET.
Afaik它在VS 2005中不起作用(但在VS 2003和VS 2008中).对于VS 2005,您可以使用以下内容:在编译时自动增加Visual Studio 2005版本和版本号.
但请注意,对于强名称程序集,不建议自动更改版本号.原因是每次重建引用的程序集时都必须更新对此类程序集的所有引用,因为强名称程序集引用始终是对特定程序集版本的引用.仅当接口发生更改时,Microsoft才会自行更改.NET Framework程序集的版本号.(注意:我仍然在MSDN中搜索我读过的链接.)
将增量(DateTime)信息添加到AssemblyFileVersion属性中,该属性具有不破坏任何依赖性的优点.
基于Boog的解决方案(对我不起作用,也许是因为VS2008?),你可以结合使用预生成事件生成文件,添加该文件(包括其版本属性)然后使用一种方法来读出那些价值再次.那是..
预生成,事件:
echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs
将生成的VersionInfo.cs文件(Properties子文件夹)包含到项目中
获取日期的代码(年到秒):
var version = assembly.GetName().Version; var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion; Version fileVersion = new Version(fileVersionString); var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);
不太舒服..而且,我不知道它是否会产生很多强制重建(因为文件总是在变化).
例如,如果您每隔几分钟/小时更新一次VersionInfo.cs文件(通过使用临时文件,然后在检测到足够大的变化时复制/覆盖真实的VersionInfo.cs),则可以使其更加智能化.我曾经非常成功地做过这件事.
将版本号为"1.0.*",它会在最后两个数字与(从一些点在天)的日期自动填充和时间(从午夜一半秒)