gpt4 book ai didi

c# - 将可运行脚本添加到 ASP.NET Core 应用程序

转载 作者:行者123 更新时间:2023-11-30 16:45:56 24 4
gpt4 key购买 nike

我目前有一个实现基本 Web API 的 ASP.NET Core 应用程序。我需要编写一个脚本,该脚本可以连接到至少可以访问数据库的同一环境中,但找不到向应用程序添加新入口点的位置。我可以很容易地查看 Program.cs 中 Main 方法中的 string[] args 而不是启动服务器,但我不知道如何加载环境并运行任意代码而不只是站着启动正常的 Kestrel 服务器。我是 .NET 世界的新手,所以我希望有一种我在文档中找不到的简单方法可以做到这一点。

基本上,我希望能够运行类似 dotnet run foo 的程序,它会在服务器上执行一些同步代码,而不是启动普通的 kestrel 服务器。

最佳答案

您可以通过添加新项目来完成此操作。这个想法是让三个项目在您的解决方案中共存:

  • ASP.NET Core 应用程序,以及
  • 包含您的可执行脚本的 .NET Core 控制台应用程序,以及
  • 一个 .NET 类库,其中包含两者的共同依赖项和服务集合配置,以便您可以在脚本中使用 ASP.NET DI 容器

从单项目 ASP.NET Core 应用程序到上述配置的步骤(假设您使用的是 Visual Studio)类似于:

  1. 在解决方案资源管理器中右键单击您的解决方案,转到添加 -> 新建项目...,然后选择项目类型Console App (.NET核心)。为其命名(例如 Scripts)并单击OK
  2. 添加另一个类型为 Class Library (.NET Core) 的项目,例如命名为常见
  3. 将您要使用的任何类从 ASP.NET Core 项目迁移到Common 项目。
  4. 添加 CommonStartup类到您的 Common 项目。给它一个public static void ConfigureServices(IServiceCollection services)并从您的 ASP.NET Core 应用程序的 Startup.ConfigureServices 剪切和粘贴任何服务配置您想要与您的脚本 项目共享的方法。添加调用 CommonStartup.ConfigureServices(services)Startup.ConfigureServices ASP.NET Core 项目中的方法。 (您需要将对 Microsoft.Extensions.DependencyInjection;Microsoft.Extensions.DependencyInjection.Abstractions; 的引用添加到 Common 项目,并将对 Common 的引用添加到 ASP.NET Core 项目;Visual Studio 应该将这些作为侧边栏操作提供。
  5. 在您的脚本 项目的Main 开始处方法,添加:

    var services = new ServiceCollection();
    CommonStartup.ConfigureServices(services);
    var provider = services.BuildServiceProvider();

    (您将不得不再次添加引用。)

  6. 您现在可以使用 Scripts 项目中的 DI 系统来获取类的实例,例如编写var widgetFactory = provider.GetService<IWidgetFactory>() .

您可以通过运行 dotnet run 来构建和运行您的脚本从你的文件夹中 Scripts项目。

如果你想要多个可执行脚本,只需添加一个switch对您的声明 Main根据 args[0] 的值执行不同操作的方法, 然后用 dotnet run wibble 调用你的脚本, dotnet run wobble

关于c# - 将可运行脚本添加到 ASP.NET Core 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com