将大量脚本作为嵌入式资源包含到项目中是一种不好的做法吗?

Is it a bad practice to include a large number of scripts as an embedded resource to a project?

我正在设计一个 Visual Studio 项目,该项目可能会使用大量(最多约 300 个)各种类型的脚本文件。这些文件不会与其他项目共享,即它们是项目独有的。是否有任何好的论据反对将 所有 这些文件作为 嵌入式资源 (通过设置它们的构建操作)然后使用 Assembly.GetManifestResourceStream() 来在 运行 时间取回它们?或者这是对嵌入式资源的误用,应该改用将这些资源作为文件保存的文件系统目录?

使用嵌入式资源的好处似乎是:

反对这种方法的论点通常是:

还有其他考虑吗?更一般地说,除了在修改的情况下所需的程序集重新编译之外,是否有理由不将项目资源(无论它们是什么)作为嵌入式资源包括在内?

如果这是一个您打算仅在自己的主机上使用的网络项目,那么最好不要将其用作嵌入式资源,而应作为通常的文件使用。 (你只需要安装一次项目,但它会很容易做小的更新)

如果你想创建一个 dll,它可能会在其他项目中重复使用,那么最好使用嵌入式资源 - 如果你做一些更新,你可以在每个项目中只更新一个 dll。

我可以从复杂的环境角度给你一些见解。

如果您的应用程序对您的组织来说几乎是关键的或重要的,并且您需要最大限度地减少事件响应时间,那么最好将所有脚本作为单独的文件。尽管重新编译您的程序集可能非常容易,但在结构化的公司环境中,即使在紧急情况下,修补程序发布通常也需要跳过许多环节。此外,这需要开发人员,而支持人员应该足以更改脚本文件。

其他考虑因素可能是(至少某些)脚本在从资源流式传输时未正确运行。他们可能需要一个地方来写入中间数据或结果数据。脚本之间也可能存在一些依赖关系(一个调用另一个等)

另一个因素是,当您无权访问项目源代码时,将资源分开可以快速查看。这为您的应用程序增加了一些透明度(这可能是需要的,也可能不需要)。它也可能有助于确定您的应用程序在出现问题时发生了什么,并可能快速 change/fix(有点类似于我的第一点)。

一般我会说这取决于你的要求。如果您需要能够频繁更改脚本(或其他不可编译的资源),那么将它们分开会更好。如果他们不经常改变,并且你喜欢整洁、简单和紧凑的文件结构,那么嵌入是一个不错的选择。