ASP .NET Core: Directory.EnumerateFiles и IIS хостинг - PullRequest
0 голосов
/ 25 февраля 2019

Когда я публикую свое веб-приложение ASP .NET Core (v.2.2) на IIS-сервере, оно выдает исключение в этой строке:

Directory.EnumerateFiles(_environment.ContentRootPath + @"/Pages/API")

Исключение:

Произошло необработанное исключение при выполнении запроса.Не удалось найти часть пути 'C: \ Release \ MySite \ Pages \ API'.System.IO.DirectoryNotFoundException в System.IO.Enumeration.FileSystemEnumerator`1.CreateDirectoryHandle (String path, Boolean ignoreNotFound)

Когда я просматриваю опубликованную папку, папка API отсутствует, но не должнабыть внутри моего сайта DLL?Или я не могу использовать относительные или абсолютные пути для поиска файлов в моем веб-проекте, когда я публикую его на ISS?

Примечание. Страницы в папке API имеют Build Action: контент, и код работает без проблем при разработке(с IIS-экспрессом).

1 Ответ

0 голосов
/ 26 февраля 2019

Для ядра 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>
...