API службы приложений Azure получает FileNotFoundException: не удается найти файл 'D: \ home \ site \ wwwroot \ MyApi.xml при попытке запустить swagger - PullRequest
0 голосов
/ 22 марта 2019

Я работаю над API ASP.NET Core 2.2, развернутым в службах приложений Azure.Я внедряю в слот DEV.

Я использую Swagger, который отлично работает на моем локальном хосте, но когда я перехожу по URL-адресу от слота DEV и использую / swagger, я получаю ошибку;

FileNotFoundException: Could not find file 'D:\home\site\wwwroot\MyApi.xml 

В моем файле * .csproj есть следующее:

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>  

И когда я иду в Kudu для слота DEV, я вижу файл MyApi.xml в / site /папка wwwroot.Если я отредактирую его в Kudu, то увижу, что содержимое соответствует ожидаемому.

В классе Startup.cs моего проекта -> Configure метод у меня есть;

app.UseStaticFiles(); 

Этопохоже на сообщение SO здесь , но в этом сообщении файл фактически не отображался в wwwroot, тогда как в моем случае это происходит.

В противном случае API работает корректно, так как я могуИспользуйте Postman для проверки всех конечных точек API в слоте DEV.Просто когда я пытаюсь получить доступ к URL-адресу слота DEV + / swagger из Chrome, я получаю исключение FileNotFound.

Мой метод Startup.cs -> ConfigureServices имеет следующее значение:

services.AddSwaggerGen(
    options =>
    {
        // integrate xml comments
        options.IncludeXmlComments(XmlCommentsFilePath);
    });

, а метод XmlCommentsFilePath приведен ниже;

private static string XmlCommentsFilePath
{
    get
    {
        var basePath = PlatformServices.Default.Application.ApplicationBasePath;
        var fileName = typeof(Startup).GetTypeInfo().Assembly.GetName().Name + ".xml";
        return Path.Combine(basePath, fileName);
    }
}

Я предполагаю, что установка Swagger правильная, поскольку она работает локально, и ошибка, которую я получаю при развертывании в слоте DEV, - это FileNotFound, указывающий на D: \ home\ site \ wwwroot \ MyApi.xml, где этот файл действительно существует согласно Куду для этого слота.

UPDATE 1

Я также пыталсярекомендация для ASP.NET 2.2 в этой SO ссылке без везения.

Чего мне здесь не хватает?

1 Ответ

1 голос
/ 25 марта 2019

Пожалуйста, убедитесь, что у вас есть что-то вроде следующего PropertyGroup в csproj в режиме выпуска

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DocumentationFile>bin\Release\netcoreapp2.2\APIProject.xml</DocumentationFile>
</PropertyGroup>

Также, пожалуйста, убедитесь, что вы ссылаетесь на тот же файл. xml в проекте c #. Посмотрите, поможет ли это.

И помните, что в разделе «Свойства проекта» на вкладке «Сборка» необходимо установить флажок «Файл документации XML».

P.S . Пожалуйста, используйте уважаемую версию Dot Net Core, которую вы используете в своем проекте.

...