如何在.NET项目中引入README等文本文件并在代码中读取调用
问题解答
一、现有配置说明与修正
你当前的配置是针对NuGet包打包场景的:
<PackageReadmeFile>配置仅用于指定打包后NuGet包对外展示的README文件,只作用于NuGet打包流程- 现有
<Content>配置仅设置了打包时包含文件,没有配置项目构建时将文件复制到输出目录,所以程序运行时无法定位到对应文件
如果你的需求是在自身应用运行时读取README,需要修改Content配置,增加CopyToOutputDirectory设置:
<ItemGroup> <Content Include="..\README.md"> <!-- 原有NuGet打包配置可保留 --> <Pack>true</Pack> <PackagePath>\</PackagePath> <!-- 新增:构建时复制到输出目录,PreserveNewest表示仅在文件更新时复制,避免重复构建 --> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
如果不需要将项目打包为NuGet包,那么<PackageReadmeFile>节点和<Pack>、<PackagePath>配置都可以直接删除,只保留Include和CopyToOutputDirectory配置即可。
如果你是ASP.NET Core项目,也可以直接把README放到项目根目录,无需额外配置即可通过
IWebHostEnvironment.ContentRootPath拼接路径读取。
二、输出目录文件读取方法
配置好复制到输出目录后,可通过以下代码读取README内容:
using System.IO; // 获取当前应用运行的根目录 var basePath = AppContext.BaseDirectory; // 拼接README文件路径,如果你修改了文件的输出路径,这里对应调整即可 var readmePath = Path.Combine(basePath, "README.md"); // 读取文件内容 if (File.Exists(readmePath)) { string readmeContent = File.ReadAllText(readmePath); // 拿到内容后即可传递给对应模块展示 Console.WriteLine(readmeContent); }
三、可选方案:嵌入式资源读取
如果你不希望README以明文文件的形式暴露在输出目录中,可以改成嵌入式资源配置,修改csproj配置如下:
<ItemGroup> <EmbeddedResource Include="..\README.md"> <!-- 自定义资源名称,方便后续读取 --> <LogicalName>README.md</LogicalName> </EmbeddedResource> </ItemGroup>
对应的读取代码:
using System.Reflection; using System.IO; var assembly = Assembly.GetExecutingAssembly(); // 对应上文配置的LogicalName var resourceName = "README.md"; using Stream stream = assembly.GetManifestResourceStream(resourceName); if (stream != null) { using StreamReader reader = new StreamReader(stream); string readmeContent = reader.ReadToEnd(); // 处理内容即可 }
内容的提问来源于stack exchange,提问作者askvictor
相关产品推荐
相关产品推荐

