Ответ 1
При отладке я использовал конфигурацию отладки (для которой я создал XmlComments для: Properties → build tab → Output → XML Documentation File)
Я не сделал этого для моей конфигурации релиза (duh...) - теперь все работает
Конфигурация из коробки отлично работает на моей машине, никаких проблем.
Но когда я развертываю нашу тестовую среду, я получаю следующее сообщение
500: { "Сообщение": "Произошла ошибка". }/api/swagger/docs/v1
Развертывание -
default web site/api
Я предполагаю, что это имеет какое-то отношение к baseUrl или что-то в этом роде, но я даже не знаю, с чего начать.
Мои маршруты отлично работают в рамках проекта - я могу вызывать все мои конечные точки webapi, и они отвечают правильно.
любая помощь будет высоко оценена
При отладке я использовал конфигурацию отладки (для которой я создал XmlComments для: Properties → build tab → Output → XML Documentation File)
Я не сделал этого для моей конфигурации релиза (duh...) - теперь все работает
Swashbuckle скрывает реальное сообщение об ошибке из-за настройки customErrors в web.config. Если вы отключите customErrors, вы должны получить более качественное сообщение об ошибке.
<system.web>
<customErrors mode="Off"/>
</system.web>
спасибо @VisualBean.
Как это было не так очевидно для меня.... как... простой образ.
В Project> Свойства вашего проекта> Закладка
Как указано в принятом ответе, вы должны убедиться, что вывод файла документации XML находится в bin, а не bin\Debug или bin\Release (проверьте это для всех конфигураций сборки).
У меня все еще есть ответ 500, потому что я использую несколько файлов документации XML. В моей реализации SwaggerConfig я включаю файлы документации XML из двух проектов (сам проект WebApi и библиотеку классов, на которые ссылается проект WebApi):
c.IncludeXmlComments(string.Format(@"{0}\bin\MyWebApiProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
c.IncludeXmlComments(string.Format(@"{0}\bin\ReferencedProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
Файл документации XML проекта WebApi был правильно опубликован в папке bin на сайте, однако файл документации XML на указанном проекте не был (даже если он отображается в папке bin скомпилированной project).
Итак, вам нужно изменить файл проекта WebApi (.csproj) в текстовом редакторе и добавить нижеследующие разделы (заменить ReferencedProject):
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\ReferencedProject\bin\ReferencedProject.xml" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
См. Как включить дополнительные файлы с помощью пакетов развертывания VS2010? для полного объяснения.
Проблема заключается в том, что запуск dotnet publish
с -r Release
не создает XML файл. Однако dotnet publish
с -r Debug
действительно создает файл. Это объясняет, почему люди только получают эту проблему, когда они развертываются в средах, отличных от локальных, а затем пинают себя, когда обнаруживают, что исключение происходит только на prod. (ЕГО РЕЛИЗ). Чтобы повторно использовать, просто запустите эту команду локально и просмотрите вывод и вы должны увидеть проблему.
(ОБНОВЛЕНИЕ) Исправление для меня состояло в том, чтобы фактически перейти в файл .csproj и добавить строку, чтобы гарантировать, что файл был скопирован всегда.
Diff, показанное ниже
Принятый ответ должен быть первым, что вы попробуете.
Однако у меня есть выходной XML-выход, чтобы перейти в App_Data \, и мой Swashbuckle настроен для чтения из этого каталога, поэтому не имеет значения, в каком направлении он будет создан: файлы xml собираются "быть там", Тем не менее, я все еще получал ошибку...
Я нашел более форумы MSDN @достаточный2012 ответ:
выберите "Удалить дополнительные файлы в месте назначения" в "Параметры публикации файла" в области "Настройки" в диалоговом окне "Опубликовать".
Работал как шарм!