ASP .NET Core:Directory.EnumerateFiles和IIS托管

时间:2019-02-25 12:48:55

标签: iis asp.net-core-2.0 absolute-path

当我在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)正常工作。

1 个答案:

答案 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>