C# 我们是否需要asp.net mvc网站项目中的程序集版本号?

C# 我们是否需要asp.net mvc网站项目中的程序集版本号?,c#,.net,visual-studio-2010,tfs,versioning,C#,.net,Visual Studio 2010,Tfs,Versioning,情况-我们有一个带有WCF层的.NETMVC解决方案。这个解决方案大约有20多个项目被编译成DLL。该站点正在SQL server 2008上运行。我们将解决方案文件夹中的SQL脚本作为版本进行维护。所以我们有SQL脚本,比如1.0.0.0版,比如说最新版本是3.0.0.1 该解决方案在TFS中受源代码控制,我们还使用TFS管理工作项、bug等。SQL脚本文件也在TFS中 问题-问题是,我们是否也需要组装的DLL上的版本号。我们的DLL不会以任何方式公开,也不会从外部世界公开,它们只是在mvc应

情况-我们有一个带有WCF层的.NETMVC解决方案。这个解决方案大约有20多个项目被编译成DLL。该站点正在SQL server 2008上运行。我们将解决方案文件夹中的SQL脚本作为版本进行维护。所以我们有SQL脚本,比如1.0.0.0版,比如说最新版本是3.0.0.1

该解决方案在TFS中受源代码控制,我们还使用TFS管理工作项、bug等。SQL脚本文件也在TFS中

问题-问题是,我们是否也需要组装的DLL上的版本号。我们的DLL不会以任何方式公开,也不会从外部世界公开,它们只是在mvc应用程序的运行时。我们不向外部客户公开WCF,同样,它只是由mvc应用程序使用

部署过程简单地说是针对最新数据库的最新代码,因此在部署时,我们会检查数据库的版本,并运行工具将其升级到解决方案中数据库项目中的最新版本

我们的一位高级架构师说,我们也应该在程序集中维护版本号。我是说,我们不需要任何版本号的代码。因为TFS管理着这一切。发布时,我们只需使用最新的程序集/部署包部署最新的代码

我没有访问过程序集版本,除非它们是发布到外部世界的程序集(如果你知道我的意思)


请你建议。。。还要注意的是,我们不做功能开发,只做版本号,这样我们就可以知道特定数据库的版本。

我更喜欢知道并能够双重检查版本的安全性。如果发布过程中出现了问题,或者出现了一个bug,似乎是发布问题,我希望尽快排除这些问题。我还认为它很容易实现,因为您花在讨论和思考上的时间比实际花费的时间要多,而且我想不出有什么不好的地方。

在我工作的一个类似项目中,我们使用版本号

对版本控制系统(VCS)的每一次提交都会导致我们的CI服务器()构建一个新的工件,并将版本设置为“最新”。每个“最新”版本的成功构建都会自动部署到我们的测试环境中。理论上,我们也可以将这个“最新”版本部署到生产环境中,但我们没有

当我们想要将新版本部署到生产环境中时,我们会运行一个不同的手动构建作业,该作业会创建一个版本化的版本(例如1.4.7)。构建作业还创建当前代码库的一个实例。为了使我们的DLL具有适当的版本,我们使用TeamCity的功能。这样,我们就不必经常手动更新项目的
AssemblyInfo.cs
文件。相反,他们总是有这样的占位符版本信息

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]
这些数字在TeamCity构建期间自动更新。版本化工件(包括任何相应的SQL脚本)保存到我们的“Releases”目录中,我们在那里保存代码库的所有版本

现在看来这一切都太过分了,对吧不是真的。

这给了我们以下好处

  • 我们的部署过程对监控页面执行一个
    wget
    ,该页面列出了版本号并断言版本匹配(预期已部署的版本与服务器上当前运行的版本)。这使我们相信部署过程工作正常
  • 如果在版本化的发行版(候选生产发行版)中发现bug,我们可以SVN
    签出标签,应用修复程序,并创建一个新的发行版,而不必担心trunk上的其他更改会影响发行版。一直保持“可发布”是很难的,这允许不必发布。虽然,别误会我
  • 如果在版本化版本中发现了问题,但无法快速解决,那么您总是可以重新部署已知可用的旧工件。能够将一个已部署的版本恢复到一个较旧的版本,这无疑为我们节省了一些时间
  • 如果在生产中发现需要调查的bug,我们可以自由地将相同版本的工件部署到我们的任何测试环境中,以便我们可以尝试在生产环境之外重现问题
可能还有更多的优点我现在忘记了,但是上面的列表应该给出一个关于适当的版本管理可以带来的力量的总体概念


我建议不要持续手动更新20多个项目的版本文件。这看起来像是一个繁忙的工作,主要是浪费时间,因为它很容易出现人为错误。无论您决定做什么,都要将其自动化并验证结果。

。你是说你正在构建的DLL上没有设置assemblyversion属性吗?嗨,Tony,不,我的意思是我们实际上需要程序集版本,这一响应就在我的脑海中呼啸而过。我们正在使用TFS自动构建和部署过程走向自动部署,这难道不意味着我们的手动版本号会产生干扰,或者至少我们必须在修改构建脚本等方面做更多的工作。如果过程是针对最新数据库的最新代码,我不明白为什么我们需要代码中的版本号。我们无法部署非最新的代码。-干杯,我理解你的处境。我不是说你需要这样做,我是说有一天它可能会很有用,而且很容易做到。虽然我从来没有走过这条路,你能不能在ASSEMBLYFILE版本中使用通配符?这不需要对构建脚本或过程进行任何更改。谢谢Alex。我认为我们将尝试版本号我们的部署过程基本上是获取最新版本,然后使用VS2010发布功能,发布DLL等,然后复制到