【问题标题】:Update version info with MSBuild (after binaries compilation)使用 MSBuild 更新版本信息(在二进制文件编译之后)
【发布时间】:2009-09-05 03:32:24
【问题描述】:

我想在我的 MSBuild 脚本中创建一个目标:

  • 从源文件夹获取 SVN 版本/日期时间('svn info' 命令)
  • 从“build”目标生成的 .EXE 和 .DLL 更新 VERSIONINFO 资源

有什么东西可以完成吗?我只是在重新发明另一个轮子之前问...

我正在查看http://msbuildextensionpack.codeplex.com

【问题讨论】:

  • +1 很好的问题,我有兴趣自己做这个。
  • 我也是! -- 但是我们(笨拙的)内部解决方案运行良好。所以... :)

标签: svn msbuild versioninfo


【解决方案1】:

MSBuild Community Tasks Project 是你的朋友。检查他们的“SvnInfo”任务。

此外,Daniel Doubrovkine 的 ResourceLib 是一部出色的作品,可以避免您在尝试解开 VERSIONINFO 创建混乱时的许多麻烦(去过那里,做过...)

【讨论】:

    【解决方案2】:

    通过编写包含在项目中的 AssemblyInfo 文件(或任何具有程序集属性的文件),在编译之前更容易做到这一点。

    在此处找到在 powershell 中编写此代码的示例:https://github.com/craigbeck/rhino-esb/blob/master/psake_ext.ps1#L7-46

    一个警告——.net 中的版本不仅仅是任何字符串,而是ushorts,这意味着它们的最大值为 65535(参见文档here)。如果您使用 svn 修订版(就像我们曾经做过的那样),一旦超过该幻数,您的构建就会中断。

    为什么要在编译后尝试这样做?

    【讨论】:

    • 二进制文件由 5 个不同的编译器生成。它们都不是用于 .NET 的。无论如何,感谢您提供有关 ushorts 的提示。
    • 好吧,现在我更加好奇了……什么语言/编译器?提到 DLL 和 EXE,我假设您在谈论标准的 .Net 开发(即 C#/VB、Visual Studio 等)。如果不是这样,您为什么选择 MSBuild?
    • 从 VS2010 开始,原生 C++ 项目是使用 msbuild 构建的。有更新程序集版本信息的工具,但对于本地人,版本仍然通过应用程序 VERSIONINFO 资源(通常在 .rc 文件中)控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2015-09-13
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多