我目前有一个实现基本Web API的ASP.NET Core应用程序。我需要编写一个挂钩到相同环境中的脚本,至少可以访问数据库,但是找不到向应用程序添加新入口点的位置。我可以在Program.cs中的Main方法中轻松查看string[] args
而不启动服务器,但我不知道如何加载环境并运行任意代码而不需要站起来正常的Kestrel服务器。我对.NET世界很陌生,所以我希望有一种简单的方法可以做到这一点,我在文档中找不到。
基本上我希望能够运行像dotnet run foo
这样的东西,它会在服务器上执行一些同步代码,而不是启动正常的沙盒服务器。
答案 0 :(得分:2)
您可以通过添加新项目来完成此操作。我们的想法是在您的解决方案中共存三个项目:
从单项目ASP.NET Core应用程序到上面的配置(假设您使用的是Visual Studio)的步骤如下所示:
CommonStartup
课程。给它一个public static void ConfigureServices(IServiceCollection services)
并剪切并粘贴您希望与 Scripts 项目共享的ASP.NET核心应用程序的Startup.ConfigureServices
方法中的任何服务配置。在ASP.NET Core项目中添加对CommonStartup.ConfigureServices(services)
到Startup.ConfigureServices
方法的调用。 (您需要向 Common 项目添加对Microsoft.Extensions.DependencyInjection;
和Microsoft.Extensions.DependencyInjection.Abstractions;
的引用,并向ASP.NET Core项目添加对 Common 的引用; Visual Studio应将这些视为侧边栏操作。在脚本项目的Main
方法开始时,添加:
var services = new ServiceCollection();
CommonStartup.ConfigureServices(services);
var provider = services.BuildServiceProvider();
(您将再次添加引用。)
var widgetFactory = provider.GetService<IWidgetFactory>()
。您可以通过在dotnet run
项目的文件夹中运行Scripts
来构建和运行脚本。
如果您需要多个可执行脚本,只需在switch
方法中添加Main
语句,根据args[0]
的值执行不同的操作,然后使用{{1}调用脚本},dotnet run wibble
等