.res 文件是不是需要在源代码管理中?
Posted
技术标签:
【中文标题】.res 文件是不是需要在源代码管理中?【英文标题】:Does the .res file need to be in source control?.res 文件是否需要在源代码管理中? 【发布时间】:2014-06-04 23:04:00 【问题描述】:在 C++Builder XE5 中。
我的理解is that二进制文件MyProject.res
(由编译器在与.cbproj
文件相同的目录中创建)包含程序图标的编译版本和项目版本详细信息(虽然我的似乎也包含一个 XML 清单)。
但此信息也包含在.cbproj
文件和.ico files
中;如果我删除 .res
文件,那么它似乎会被重新创建,就像我下次打开项目时一样。
那么将*.res
标记为不在源代码管理中是否安全? (我使用git
)。和/或者是否可以将其生成在与目标文件相同的目录中,这样它就不会与源文件混在一起?
(这在 C++Builder 5 中肯定是不安全的 - 如果您删除了 .res 文件,然后它会抱怨找不到它,并且您丢失了图标)。
更新:这是否也适用于.tlb
文件?这似乎是根据.ridl
文件编译的,如果我删除它会自动重新生成。
【问题讨论】:
关于资源文件:如果你是一个开发者,我认为没有必要将你的 .res 文件置于源代码控制之下。然而,我的一些同事报告了多用户项目的问题 - 从存储库(subversion)中提取文件后资源变得“混乱”。特别是 TImageList 图像的透明度/背景颜色属性。然而,它似乎只影响某些系统,不幸的是我不知道为什么。出于这个唯一原因,我们确实在源代码管理中包含 .res 文件。 注意:我提到的导致问题的拉取文件是 .dfm 文件。 DFM 确实需要在源代码管理中,因为它们是存储表单详细信息的地方! AFAIK 虽然 DFM 和 RES 之间没有关系? 更新:几个月后,仍然没有遇到任何问题让.res
和.tlb
脱离源代码控制。
@MattMcNabb:还要确保在将 DFM 置于源代码控制之前将其设置为文本模式,然后您可以对它们执行差异等。
【参考方案1】:
如果被删除,C++ Builder 6.0 和更高版本将重新创建 RES 文件。我将它们视为其他临时/构建文件(如 OBJ 文件)并且不将它们放入版本控制软件中。不过,我确实有包含所有这些文件的夜间备份,我认为这仍然是一种很好的做法。
我不确定 TLB 文件。我会暂时删除(aka-rename)一个,看看它是否被重新创建到相同的状态。如果是,应该和RES文件一样。
但是,如果您拥有的只是已编译的资源,则这不适用于 3rd 方库。在这种情况下,我仍然没有放入我的版本控制中,因为我不会修改它们。我只有备份。
【讨论】:
在 C++Builder 2009 中引入 RIDL 之前,删除 TLB 文件是不安全的,否则会丢失类型库。引入 RIDL 后,TLB 成为了一个中间文件,需要时重新创建。【参考方案2】:不管怎样,TFS 源代码管理默认排除 *.res
但包括 *.tlb
。
因此,您应该期望 *.res
文件由其关联的构建创建。如果构建不存在,则应包含 *.res
文件。
我怀疑您对 *.tlb
文件的构建也是正确的,但也许 TFS 在默认情况下不会排除这些文件,因为扩展名并不完全是 OLE 类型库文件独有的。
【讨论】:
以上是关于.res 文件是不是需要在源代码管理中?的主要内容,如果未能解决你的问题,请参考以下文章
我需要在源代码管理中维护 ReSharper 的 dotsettings.user 文件吗?