【问题标题】:Add custom version information to C# application向 C# 应用程序添加自定义版本信息
【发布时间】:2011-05-17 09:34:10
【问题描述】:

应用程序是 C# .Net 3.5 WCF 服务。

我希望在构建过程中动态地将一些构建信息添加到最终的二进制文件和程序集中,然后可以通过编程方式读取这些信息,并在 WCF 客户端向 Web 服务发送 GetVersionInfo 请求时将其发送回。

.Net 程序集版本控制是不够的。我想包含其他字符串数据,其中包含构建应用程序时系统的状态。

我想我会通过添加一个构建后事件来调用脚本来使用我想要的数据更新 app.config 文件来做到这一点。这听起来对吗,还是我应该考虑其他方法?

更新

我还希望这个字符串出现在最终 exe 的“特殊构建描述”属性中。 IE。我想右键单击文件并在文件的版本选项卡中查看此信息。

提前致谢。

【问题讨论】:

  • 我,我想要构建号,即“1.0.*”中的 *,每次构建时自动增加一。我在一些早期版本的 VS 中进行了此操作,但不知道现在是否可以在 VS 2010 中设置它。有人吗?

标签: c# visual-studio-2008 build


【解决方案1】:

我怀疑预构建事件可能比构建后更合适...您是否考虑过将buildinfo.xml 文件(或类似文件)作为嵌入式资源构建到程序集中?然后您可以使用Assembly.GetManifestResourceStream 加载它。这样您就不必担心适应现有文件或类似的东西 - 只需在预构建步骤中用新文件覆盖 buildinfo.xml

【讨论】:

  • 您好,感谢您的回答。您对更新有什么想法吗,即如何填充最终二进制文件的特殊构建描述属性?
【解决方案2】:

您必须确定要交换的信息与可执行文件本身相关联的重要性。

在构建过程中更新配置文件是一个可行的模型,但它将信息放置在一个位置,任何有访问权限和文本编辑器的人都可以更改它。

在编译后的程序集中构建后更新信息当然是可能的,但如果您决定对程序集签名,它很脆弱并且会崩溃。这也是很多工作,因为没有内置它支持以这种方式重写汇编文件。

您应该考虑的另一种方法是创建自己的自定义程序集级元数据属性并在构建过程中分配它们。您甚至可以将它们放在单独的代码文件中(或将它们附加到 AssemblyInfo.cs)作为构建的一部分。

您还可以考虑创建嵌入式资源(例如 XML 文件),并在运行时从程序集清单中检索它。

上述任何一种方法都需要您使用预构建自定义步骤而不是构建后步骤。

就个人而言,如果没有大量数据,我发现元数据属性是一种方便的方法。否则,我会考虑使用嵌入式资源文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2016-02-26
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多