【发布时间】:2010-06-24 22:24:33
【问题描述】:
我无法找到 .NET 框架中用于在构建时设置版本信息的内置机制。我们的开发工作主要针对使用 ClickOnce 部署的 WinForms 应用程序。为此,我们已经有一个系统就位并且正在运行。我想尝试扩展我们已经使用的一些 ASP.NET MVC 项目。
在我们的 CI 服务器开始构建我们的 WinForms 应用程序之前,我们打开 .csproj 文件并根据我们的 CC.NET 内部版本号和当前的 SVN 版本调整一些值。主要和次要版本号在配置文件中手动设置。
changeNodeValue('ApplicationVersion', version) // Version like "1.0.111.2222"
changeNodeValue('ApplicationRevision', revision) // SVN Revision like "2222"
所以,我们在共享库中有这样的东西。
if (ApplicationDeployment.IsNetworkDeployed)
return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
else
return "development";
这在我们的 WinForms 应用程序中自然可以正常工作。从不是由 ClickOnce 部署的应用程序(我们的 Web 项目)调用此方法始终返回“开发”。
有没有一种方法可以为我们的 ASP.NET MVC 应用程序做同样的事情,即调整项目文件或构建参数以向 .NET 提供版本号?
【问题讨论】:
-
据我所知 ApplicationDeployment 总是与单击一次(甚至类似的部署选项)有关。所以如果你没有用合适的机制部署你的应用程序,你最终会进入 else 分支(因为你的应用程序根本没有部署)。您可以尝试获取版本号,例如的执行程序集。 (by Assembly.GetExecutingAssembly().GetName().Version)另一方面,这需要执行程序集维护整个项目的版本号,因此可能不合适。
-
@Andreas 如果我改用
GetCallingAssembly()并且按照我的想法,这实际上是合适的。但是,我不知道如何设置程序集的版本。 -
B:您的项目中是否有一个名为 AssemblyInfo.cs 的文件(可能在 Properties 文件夹下)?如果是这样,您可以修改那里提供的信息。你甚至可以自动化这个过程。如果不是或一般介绍,请查看 System.Reflection.AssemblyVersionAttribute 以获取有关如何自己生成程序集版本信息的线索。还要注意相关课程,但请随时再次提问:-)
标签: .net continuous-integration versioning