.NET Core 6项目部署Linux服务器后路径错误问题求助
.NET Core 6部署Linux后路径错误的解决方法
问题根源:代码里硬写了Windows专属的反斜杠
\拼接路径,而Linux系统默认使用正斜杠/作为路径分隔符,这种写法会导致路径解析完全错误;同时直接用字符串拼接路径的方式本身不支持跨平台。解决步骤:
- 用
Path.Combine拼接路径:这是.NET官方提供的跨平台路径拼接方法,会自动根据当前操作系统选择正确的路径分隔符,彻底避免平台兼容问题。 - 用
WebRootPath读取wwwroot文件:ContentRootPath指向项目根目录,而wwwroot是静态文件专属目录,用_environment.WebRootPath获取该目录路径更准确。 - 确保wwwroot文件被正确发布:需要在项目配置中设置,保证发布时wwwroot下的文件被同步复制到Linux服务器上。
- 用
修改后的代码示例
// 获取wwwroot目录路径,专门用于读取静态文件 string webRootPath = _environment.WebRootPath; string contentType = ".pdf"; string dt = DateTime.Now.ToString("dd_MM_yyyy_hh_mm_ss_ffffff"); string filename = $"{excel.SelectedService}_Answer_{dt}{contentType}"; // 用Path.Combine拼接Azure存储目录路径 var pathBuild = Path.Combine(_environment.ContentRootPath, "Azure"); if (!Directory.Exists(pathBuild)) { Directory.CreateDirectory(pathBuild); } // 用Path.Combine拼接HTML模板的完整路径 var templatePath = Path.Combine(webRootPath, "src", "Price_Template.html"); string templateHtml = System.IO.File.ReadAllText(templatePath); var template = Handlebars.Compile(templateHtml);
补充发布配置
在项目的.csproj文件中添加以下配置,确保wwwroot下的所有文件都能被包含到发布包中:
<ItemGroup> <Content Include="wwwroot/**/*" CopyToPublishDirectory="PreserveNewest" /> </ItemGroup>
内容的提问来源于stack exchange,提问作者Taha Shahzad
相关产品推荐
相关产品推荐

