如何在C#代码中嵌入文件的内容?

时间:2010-11-09 19:19:17

标签: c# deployment

问题

我有一个包含此类文本的文件(没有别的)

2010-10-05

我想将此文件(内容)嵌入到C#代码中,因此我可以将此文本分配给常量(字符串MyDate),然后使用此常量。

背景

我尝试实现的是保持程序的相关信息 - 无论是在网站上还是在程序内。

解决方案必须是:

  • 死简单
  • 自动
  • 光滑

我想到的最简单,就是保持文件“版本”与版本(实际发布日期,因为它更有意义恕我直言),这样的文件可以在网站上显示没有问题(PHP)。我想我会编写一个小的.bat文件来自动生成每个版本的文件。

但是如何在C#代码中使用它(嵌入)?

我想要实现这个或替代解决方案,但不比这个更复杂。

变通方法

我已经了解了几种解决方法,例如:

  • 不仅可以创建只有日期的文件,还可以创建可以直接编译的小型C#代码
  • 在安装程序中包含此文件,并在安装后阅读它,以获取版本信息

但我也不觉得“干净”。我需要更顺畅的东西: - )

背景背景

我的程序一方面应该通知用户“嘿,有更新版本的程序”,另一方面当浏览网页时,应该在页面上显示有关发布日期的信息。

事实

  • 版本:构建日期,也是发布日期
  • 网站:Linux,HTML& PHP
  • 程序:VS 2010,C#4.0,单个exe
  • 安装程序:高级安装程序

编辑 - 解决方案

我试图完全避免这个问题并依赖文件的时间戳 - 它可以工作,因为在午夜之前构建exe并在之后创建安装包时只会出现一个弱点。但是,将文件上传到ftp服务器会破坏这样的计划 - 你必须确保ftp服务器支持时间戳修改,你不能使用SFTP协议。

所以,我最终创建了“版本”文件而没有嵌入它(因为我不知道怎么做) - 我在网站上用PHP脚本和执行时用C#代码读取内容。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

如果使用资源文件(.resx文件),则可以将其编译到程序集中。

MSDN:Adding and Editing Resources (Visual C#)

答案 1 :(得分:1)

要解决检查更新的问题,您可以:使用WebClient从您的网站加载页面,并检查版本信息。

要解决显示版本信息的问题,您只需在安装程序中保留一个名为versioninfo.txt的文本文件,然后在运行时加载/显示该文件,或者如@Daniel所述,您可以使用资源编译将文本文件转换为二进制文件。

答案 2 :(得分:1)

您的问题似乎有两个部分:

1)自动为您的程序生成内部版本号/版本

2)拥有一个Web服务,检查内部版本号是否为最新版本。

对于第1部分,有多种解决方案,例如通过资源自动包含文件和预构建事件,甚至使用MS自动递增构建号。

第二部分涉及与您的网站分享该信息。只要您“发布”最新版本的程序并且可能是手动事件,就必须发生这种情况。您可以编写一个“发布”程序,读取程序的MS内部版本号或嵌入式资源,并将其写入您将用作Web服务的后端存储的内容。

然后,Web服务对来自已安装程序的请求进行字段分析,并检查是否存在更高版本。

修改

再考虑一下。您只需要每次构建程序时增加的MS内部版本号。将其视为索引保存在您网站上的数据的关键。程序将版本号发送到Web服务,如果有更新版本,则Web服务返回较新的版本号加上其发布日期。

但是,您可能仍希望在程序中嵌入发布日期,以便将其显示在about框中,而无需转到Web服务来查找该信息。