我只是想知道如何使用Visual Studio(2005)自动增加文件的构建(和版本?)
如果我查找C:\Windows\notepad.exe的属性,版本选项卡给出“文件版本: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)
对于任何使用Tortoise Subversion的人,您可以将您的版本号之一绑定到源代码的Subversion修订号。我发现这非常有用(审计人员也非常喜欢!)。您可以通过在预构建中调用WCREV实用程序并从模板生成AssemblyInfo.cs来实现这一点。
如果您的模板名为AssemblyInfo。wcrev位于正常的AssemblyInfo.cs目录中,而tortoise位于默认安装目录中,那么你的预构建命令看起来像这样(注意,都在一行中):
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev" "$(ProjectDir)Properties\AssemblyInfo.cs"
模板文件将包含wcrev令牌替换字符串:$ wcrev $
如。
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
注意:
由于现在生成了AssemblyInfo.cs,您不希望对其进行版本控制。
对于任何使用Tortoise Subversion的人,您可以将您的版本号之一绑定到源代码的Subversion修订号。我发现这非常有用(审计人员也非常喜欢!)。您可以通过在预构建中调用WCREV实用程序并从模板生成AssemblyInfo.cs来实现这一点。
如果您的模板名为AssemblyInfo。wcrev位于正常的AssemblyInfo.cs目录中,而tortoise位于默认安装目录中,那么你的预构建命令看起来像这样(注意,都在一行中):
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev" "$(ProjectDir)Properties\AssemblyInfo.cs"
模板文件将包含wcrev令牌替换字符串:$ wcrev $
如。
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
注意:
由于现在生成了AssemblyInfo.cs,您不希望对其进行版本控制。
要获得版本号,请尝试
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日以来的天数,第四个数字是当天总秒数的一半。所以如果你在午夜编译,它应该是0。
如其他文章所述,在AssemblyInfo中的版本号中或在项目属性下设置*并不适用于所有版本的Visual Studio / . net。
Afaik,它在2005年的比赛中不起作用(但在2003年和2008年的比赛中不起作用)。对于VS 2005,你可以使用以下方法:在编译时自动增加Visual Studio 2005版本的构建和修订号。
But be aware that changing the version number automatically is not recommended for strong-named assemblies. The reason is that all references to such an assembly must be updated each time the referenced assembly is rebuilt due to the fact that strong-named assembly references are always a reference to a specific assembly version. Microsoft themselves change the version number of the .NET Framework assemblies only if there are changes in interfaces. (NB: I'm still searching for the link in MSDN where I read that.)
我想出了一个类似于基督徒的解决方案,但不依赖于社区MSBuild任务,这对我来说不是一个选择,因为我不想为我们所有的开发人员安装这些任务。
我正在生成代码并编译到程序集,并想自动增加版本号。但是,我不能使用VS 6.0。* AssemblyVersion技巧,因为它每天自动递增构建号,并破坏与使用旧构建号的程序集的兼容性。相反,我希望有一个硬编码的AssemblyVersion,但要有一个自动递增的AssemblyFileVersion。我通过在AssemblyInfo.cs中指定AssemblyVersion并在MSBuild中生成一个VersionInfo.cs来实现这一点,
<PropertyGroup>
<Year>$([System.DateTime]::Now.ToString("yy"))</Year>
<Month>$([System.DateTime]::Now.ToString("MM"))</Month>
<Date>$([System.DateTime]::Now.ToString("dd"))</Date>
<Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
<AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
</PropertyGroup>
<Target Name="BeforeBuild">
<WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
</WriteLinesToFile>
</Target>
这将生成一个VersionInfo.cs文件,该文件具有AssemblyFileVersion的Assembly属性,其中版本遵循带有构建日期的YY.MM.DD.TTTT模式。您必须在项目中包含此文件并使用它进行构建。