使用外部文件或资源?

Yar*_*veh 4 .net c# resources embedded-resource

我正在编写一个使用长"硬编码"字符串的C#应用​​程序.

出于可维护性的原因,我决定将此字符串放在外部文本文件中并加载它.这是一个好主意吗?在这种情况下,额外的I/O似乎并不大.

我意识到我还可以选择将此文件作为.resx资源嵌入.这是一个更好的主意吗?该文件永远不需要本地化.

Erv*_*ter 14

如果您打算允许用户/管理员更改字符串,我同意其他答案,我建议将其置于设置中.

如果您不希望它在部署后可编辑,并且只会由您和您的开发人员修改,那么我会将其放在嵌入式资源中(注意,这与.resx文件不同).您可以在运行时阅读它,如下所示:

Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(“MyAssemblyNamespace.MyTextFile.txt”);
StreamReader reader = new StreamReader(stream);
string theText = streamReader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

更新:这是易于维护的解决方案..txt文件将只是Visual Studio中解决方案资源管理器中的另一个文件,您可以像编辑任何其他文件一样对其进行编辑,将其保存在源代码控制之下,就像任何其他文件一样,等等.通过更改构建将其转换为嵌入式资源在属性窗口中对"嵌入式资源"执行操作.

最终结果是您的文件嵌入到DLL中,因此您只需要分配1个DLL而不是DLL和必须一起移动的文件的文件夹.

更新2:关于"生产调试",这是一个非常静态的解决方案,因此您无法在运行时更改文本文件的内容,因为该文件在编译时被烘焙到DLL中.要读取文件的内容,可以使用反射器等工具查看DLL的嵌入资源.您还可以编写一个简单的命令行工具,将DLL中的所有嵌入式.txt文件转储到单个文件中供您查看.

对于内存使用,没有比"我只在需要时将其从文件加载到内存中"更有效的解决方案.当您的DLL根据特定情况加载到内存中时,您必须决定改进的可维护性和部署是否值得花费额外内存的成本.也就是说,你还没有说这些文件有多大.如果它们真的很大(兆字节+),我可能不会使用这个解决方案,并会使用硬盘上的松散文件.如果它们通常很小(几百千字节),我不会担心额外的内存,除非你处于某种嵌入式设备的情况,其中RAM非常紧张.