相关疑难解决方法(0)

如何拥有自动递增版本号(Visual Studio)?

我想存储一组在构建时自动递增的整数:

int MajorVersion = 0;
int MinorVersion = 1;
int Revision = 92;
Run Code Online (Sandbox Code Playgroud)

当我编译时,它会自动增加Revision.当我构建安装项目时,它会增加MinorVersion(我可以手动执行此操作).MajorVersion只会手动增加.

然后我可以在菜单Help/About中向用户显示版本号:

  Version: 0.1.92

怎么能实现这一目标?

这个问题不仅要求如何使用自动递增版本号,还要求如何在代码中使用它,这是一个比其他更完整的答案.

c# versioning visual-studio

454
推荐指数
8
解决办法
34万
查看次数

自动更新版本号

我希望我的应用程序的version属性为每个构建增加,但我不确定如何在Visual Studio(2005/2008)中启用此功能.我试图将AssemblyVersion指定为1.0.*但它并没有让我得到我想要的.

我也使用了一个设置文件,并且在早期的尝试中,当程序集版本发生更改时,我的设置被重置为默认值,因为应用程序在另一个目录中查找了设置文件.

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

还将理解版本控制如何工作的简短说明.构建和修订号何时增加?

c# versioning visual-studio

106
推荐指数
5
解决办法
7万
查看次数

如何在Visual Studio 2017中使用BeforeBuild和AfterBuild目标?

升级到csproj以使用Visual Studio 2017和Microsoft.NET.Sdk后,我的"BeforeBuild"和"AfterBuild"目标不再运行.我的文件看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>

  <!-- my targets that don't run -->
  <Target Name="BeforeBuild">
      <Message Text="Should run before build" Importance="High" />
  </Target>

  <Target Name="AfterBuild">
      <Message Text="Should run after build" Importance="High" />
  </Target>

</Project>
Run Code Online (Sandbox Code Playgroud)

.net msbuild csproj .net-core visual-studio-2017

15
推荐指数
3
解决办法
4143
查看次数

VS2008安装项目:卸载以前的MSI

我有一个VS2008安装项目,它创建一个安装WinForms应用程序(C#)的setup.msi.

每次更新版本号时,用户首先必须卸载以前的版本才能安装新版本.否则我们得到可怕的"此产品的另一个版本已安装"消息.

这是我在构建新版本安装程序时已经在做的事情:

  • 设置RemovePreviousVersions = true和DetectNewerInstalledVersion = true
  • 增加AssemblyVersion(正在部署的exe)
  • 增量版本(安装项目)
  • 生成一个新的ProductCode(当VS更改时,由VS提示)
  • 保持UpgradeCode不变

然而它仍然拒绝卸载以前的版本.那么,我错过了什么?或者我做错了什么?

谢谢!

c# installation windows-installer visual-studio winforms

13
推荐指数
2
解决办法
2万
查看次数

版本化.NET构建

只是想知道.NET构建版本化的最佳方法是什么?

我用:

  • TFS 2013用于版本控制
  • TFS门禁办理登机手续
  • Wix 3.8将代码打包到MSI文件

我想设置版本:

  • 程序集(AssemblyInfo.cs,或所有项目中引用的共享程序集)
  • MSI包(使用Wix代码)
  • 文档(例如,在构建的最终输出中的readme.txt文件内)
  • 等等

理想的版本号将允许跟踪已安装的软件回到确切的源代码.
就像是:

<Major>.<Minor>.<TFS_changeset_number>
Run Code Online (Sandbox Code Playgroud)

我希望在解决方案附近的版本控制中存储一些简单文本\ XML文件的前两部分版本,因为我相信它们应该共存.开发人员将手动更新此文件(例如,遵循语义版本控制方法).每个构建都将读取此版本文件,从调用CI工具获取3d版本的部分,并使用该版本更新所有必需的文件.

实现这个的最佳方法是什么?

我过去曾使用过几种方法:

1)执行此版本的NAnt\MsBuild包装器,然后调用MsBuild获取解决方案.它可以从CI工具(Jenkins\TeamCity\etc)调用.

问题 - 当我构建解决方案两次时,与TFS门控签入的集成很难看.

2)自定义TFS构建过程模板

问题 - 它不是那么简单,并导致一些合并工作TFS升级.此外,在门控签到中还不存在变更集编号,因此我们只能使用先前的变更集ID.

3)解决方案中的单独MsBuild项目,它仅执行此版本控制任务,并配置为首先在VS解决方案的项目构建顺序中运行.

问题 - 需要在所有其他项目(包括所有未来的项目)中引用这个元项目,这些项目感觉很难看

我知道不同的MsBuild和TFS扩展包可以简化更新.这个主题不是关于哪一个是最好的.问题是方法论而不是技术问题.

我还认为,如果微软在其标准TFS构建模板中包含版本控制功能,那将是理想的选择.其他CI工具已经具有此功能(AssemblyInfo修补程序).




更新11/09/2014

我决定明确表达符合敏捷\持续交付最佳实践的版本控制原则:

1)能够再现任何历史建筑

2)由于1)并且根据CD原则,所有内容(源代码,测试,应用程序配置,环境配置,构建\包\部署脚本等)都存储在版本控制下,因此具有分配给它的版本

3)版本号与其适用的源代码紧密存储在一起

4)人们可以根据他们的业务\营销逻辑更新版本

5)该版本只有一个主副本,用于自动构建\包装过程的所有部分

6)您可以轻松地说出目标系统上当前安装了哪个版本的软件

7)已安装软件的版本必须明确标识用于构建它的源代码

8)比较版本比较低,哪些更高,以控制允许哪些升级\降级方案及其实现细节是非常简单的




更新15/09/2014

请看下面我自己的答案.
我很幸运能找到满足我所有要求的解决方案!

.net versioning msbuild tfs wix

12
推荐指数
2
解决办法
1万
查看次数

大会版本的详细信息

我们将在每个库中的Assembly.cs中找到Assembly版本.

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Run Code Online (Sandbox Code Playgroud)

我的问题是这是什么1.0.0.0意思?

谢谢

.net c# asp.net assemblies assemblyinfo

9
推荐指数
1
解决办法
9107
查看次数

动态版本控制

我有一种情况,我希望版本控制在构建时是动态的.

版本模式: <year>.<month>.<day>.<hhmm>

但我已经读过在编译时重新分析属性中使用的String值的位置.

有关如何完成动态版本控制的任何建议吗?

理想情况:

<Assembly: AssemblyVersion("4.0.0.0")> 
<Assembly: AssemblyFileVersion(Year(Now) & "." & Month(Now()) & "." & Day(Now()) & "." & String.format("hhmm", now()))> 
Run Code Online (Sandbox Code Playgroud)

我知道它不会工作,但应该得到交叉点.

c# vb.net assemblyfileversion

8
推荐指数
1
解决办法
1357
查看次数

如何以编程方式增加版本号?

如何以编程方式将给定版本的数字增加到最高版本的下一个版本?

例如,如果我有一个文件Program.exe具有以下版本号:

Program.exe 1.0.0.0
Program.exe 1.0.0.4
Program.exe 1.1.0.76
Program.exe 1.0.0.66
Run Code Online (Sandbox Code Playgroud)

在这种情况下,下一个版本号将是1.1.0.77

实现这一目标的最简单方法是什么?

在此先感谢您的帮助

c# vb.net visual-studio

7
推荐指数
1
解决办法
3044
查看次数

如何自动增加包版本号?

我意识到程序集的构建/修订版号可以通过更改自动递增

[assembly: AssemblyVersion("1.0.0.0")]
Run Code Online (Sandbox Code Playgroud)

至

[assembly: AssemblyVersion("1.0.*")]
Run Code Online (Sandbox Code Playgroud)

在AssemblyInfo.cs文件中.

但是如何自动增加Package.appxmanifest中定义的版本号?也就是说,版本号可通过以下方式访问:

 Windows.ApplicationModel.Package.Current.Id.Version
Run Code Online (Sandbox Code Playgroud)

我正在使用Visual Studio 2013.

编辑:不应该被标记为重复,我问的是包版本而不是汇编版本.

c# windows-store-apps visual-studio-2013

7
推荐指数
3
解决办法
7432
查看次数

如何从C#中的预编译器获取当前的DateTime?

在C#3.0中,我有一个属性,假设包含该类的版本.版本号只是编译的日期和时间.现在,我有以下代码:

public DateTime Version
{
    get { return DateTime.UtcNow; }
}
Run Code Online (Sandbox Code Playgroud)

显然,这是错误的,因为此属性返回当前日期和时间.那么,预编译器是否可以在编译时打印 DateTime?在这种情况下,我可以做类似于下面的事情.

public DateTime Version
{
    get { return new DateTime("PRECOMPILER DATE"); }
}
Run Code Online (Sandbox Code Playgroud)

.net c# c-preprocessor

6
推荐指数
2
解决办法
3348
查看次数