在C#中嵌入XML文件需设“生成操作”为Embedded Resource,资源名默认为“默认命名空间.文件夹路径.文件名”,可用GetManifestResourceNames()验证;读取时用GetManifestResourceStream()配合XDocument.Load(),注意判空;可通过.csproj中LogicalName自定义资源名。

在C#中,将XML文件嵌入到程序集中作为资源,主要通过设置文件的“生成操作”为 Embedded Resource,然后使用 Assembly.GetManifestResourceStream() 读取。关键在于资源名称的正确性与路径匹配。
设置XML文件为嵌入资源
在Visual Studio中:
- 右键项目中的XML文件(如
config.xml)→ 选择“属性” - 将“生成操作(Build Action)”设为 Embedded Resource
- 确保“复制到输出目录”为“不复制”(嵌入后无需额外文件)
获取正确的资源名称
嵌入资源的默认名称是:默认命名空间.文件夹路径.文件名(含扩展名),区分大小写。
例如:项目默认命名空间为 MyApp,XML文件放在 Data\config.xml,则资源名为 MyApp.Data.config.xml。
建议运行时列出所有资源名验证:
var names = Assembly.GetExecutingAssembly().GetManifestResourceNames(); foreach (var n in names) Console.WriteLine(n);
读取嵌入的XML内容
使用 GetManifestResourceStream 获取流,再用 XDocument 或 XmlDocument 加载:
- 推荐用
XDocument(LINQ to XML,更现代):
var assembly = Assembly.GetExecutingAssembly();
using var stream = assembly.GetManifestResourceStream("MyApp.Data.config.xml");
if (stream != null)
{
var doc = XDocument.Load(stream);
// 处理XML...
}
- 若需字符串形式,可用
StreamReader读取流内容 - 注意检查返回的
Stream是否为null,避免因资源名错误导致空引用异常
处理多级文件夹或自定义资源名
如果希望资源名更简洁,可在文件属性中设置“自定义工具命名空间”或改用“逻辑名称”:
- VS不直接支持重命名嵌入资源名,但可通过
.csproj手动配置(高级用法):
@@@###@@@MyConfig.xml
此时资源名即为 MyConfig.xml,不再依赖文件路径。










