如何将.cs源文件添加为DLL的嵌入式资源且保留编译与IntelliSense
实现方案
核心逻辑
SDK风格的.NET项目支持同一个文件同时归属多个生成操作项组,不需要把C#文件的默认生成动作从Compile改成Embedded resource,只需要额外将目标C#文件加入嵌入式资源列表即可,两者不会冲突。
操作步骤
- 先将你之前修改过生成动作的目标C#文件的Build Action改回默认的
Compile,恢复正常的编译检查与IntelliSense支持。 - 右键点击项目→选择「编辑项目文件」,在打开的.csproj文件中添加如下配置,将目标C#文件额外标记为嵌入式资源:
<Project Sdk="Microsoft.NET.Sdk"> <!-- 原有项目配置保持不变 --> <ItemGroup> <!-- 单个文件嵌入示例,替换为你实际的文件路径 --> <EmbeddedResource Include="YourTargetClass.cs"> <!-- 可选配置:自定义资源名称,方便运行时读取,无需拼接命名空间前缀 --> <LogicalName>YourTargetClass.Source.cs</LogicalName> </EmbeddedResource> <!-- 批量嵌入目录下所有C#文件示例 --> <!-- <EmbeddedResource Include="YourSourceDir\*.cs" /> --> </ItemGroup> </Project>
运行时读取嵌入式资源示例
// 替换为你的项目中任意类的类型、以及实际的资源名称 var assembly = typeof(YourProjectAnyClass).Assembly; using var resourceStream = assembly.GetManifestResourceStream("YourTargetClass.Source.cs"); using var streamReader = new StreamReader(resourceStream); string sourceCode = streamReader.ReadToEnd();
效果验证
配置完成后重新生成项目即可同时满足三个要求:
- 目标C#文件会正常参与编译,编译器会主动检查语法、类型错误
- Visual Studio会正常识别为C#源文件,提供完整的IntelliSense提示、跳转、重构支持
- 生成的程序集内会包含目标文件的源代码作为嵌入式资源,运行时可以正常读取
内容的提问来源于stack exchange,提问作者bgh
相关产品推荐
相关产品推荐

