У меня есть консольное приложение, которое должно предоставлять HTTP API.
Как добавить минимальный API ASP.NET Core в консольное приложение?
В идеале без ненужных зависимостей вроде контроллеров, бритвенных представлений и т. д.
Кажется, что WebApplication.CreateBuilder(args)
нужно вызывать из веб-приложения:
csproj:
<Project Sdk = "Microsoft.NET.Sdk.Web">
но я хочу, чтобы консольное приложение использовало Microsoft.NET.Sdk, потому что
Если у вас есть Visual Studio, вы можете создать проект «ASP.NET Core Web API».
Изменение SDK меняет слишком многое. Мне не нужен веб-SDK или веб-проект по причинам, упомянутым в вопросе.
Я хочу развернуть как приложение Windows,
Вы можете добавить ссылку на фреймворк в общий фреймворк, как предлагается в документации:
<ItemGroup>
<FrameworkReference Include = "Microsoft.AspNetCore.App" />
</ItemGroup>
Это позволит вам использовать/запускать функциональность ASP.NET Core в любом приложении (обратите внимание, что ASP.NET Core сам по себе уже является консольным приложением, поэтому, возможно, вы можете просто использовать соответствующий шаблон). Хотя он не должен отвечать вашему второму требованию:
Я хочу, чтобы консольное приложение было легким. Web SDK содержит слишком много зависимостей (выходные данные > 100 МБ)
Рассмотрите возможность вариантов обрезки , которые позволят уменьшить размер приложения (а благодаря встроенной поддержке AOT для ASP.NET Core 8 оно должно становиться все лучше и лучше).
Смотрите также:
К сожалению, я ссылаюсь на стороннюю библиотеку взаимодействия COM, а обрезка несовместима с взаимодействием COM, см. stackoverflow.com/questions/78206352/…
Таким образом, единственный вариант использования минимального API — это ссылка на максимальную структуру?
@Льеро, в принципе да. Опять же, обрезка должна хотя бы в некоторой степени уменьшить размер двоичного файла.
Обрезать было бы здорово, если бы это работало
Это просто используемый Sdk для проекта, он ничего не говорит о типе вывода проекта. Просто установите его на консоль.