当我在IIS服务器上发布ASP.NET Core(v.2.2)Web应用程序时,它将在此行上引发异常:
Directory.EnumerateFiles(_environment.ContentRootPath + @"/Pages/API")
例外:
执行请求时发生未处理的异常。 找不到路径“ C:\ Release \ MySite \ Pages \ API”的一部分。 System.IO.DirectoryNotFoundException在 System.IO.Enumeration.FileSystemEnumerator`1.CreateDirectoryHandle(String 路径,布尔值ignoreNotFound)
当我查看已发布的文件夹时,没有API文件夹,但是它不应该位于我的网站dll中吗?或者,当我在ISS上发布文件时,是否可以不使用相对路径或绝对路径在Web项目中查找文件?
注意:文件夹API中的页面具有Build Action:内容,并且代码在开发中(使用IIS-express)正常工作。
答案 0 :(得分:1)
对于asp.net核心,它将在发布到Project.Views.dll时预编译视图。对于Directory.EnumerateFiles
,它仅列出磁盘中实际存在的文件。
有关解决方案,请尝试修改project.csproj以添加<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
。
完整
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.0" />
</ItemGroup>
</Project>