使用干净的架构发布 ASP NET Core

问题描述 投票:0回答:1

我使用 .NET Core 6 使用 Clean Architecture 开发了一个项目,将其发布在 GIT 中并在 Azure 中的免费 Linux 服务器上实施。

GIT 上的 CashFlowMJV Azure 上的 CashFlowMJV

由于在Azure中的实现是自动的,我不清楚服务器内部发布的每一层的文件是如何排列的

我有一个 VPS,我在其中安装了 Plesk Obsidian 管理面板,我正确配置了 .NET 工具包。我创建了一个简单的 webapp 并运行了以下命令:

dotnet publish -c Release -r linux-x64  

命令生成目录" in\Release et6.0\linux-x64\publish" 在项目中,我复制文件并将它们移动到"httpdocs",并将初始文件指向"webapp.dll"。测试项目运行完美。

但是我无法在该服务器上使用 Clean Architecture 部署我的项目,我不知道文件夹和文件应该如何显示,因为每一层都会生成不同的发布目录。系统的每一层都是一个.NET Core子项目,其中:

  • CashFlowMvc.Domain - 类库
  • CashFlowMvc.Application - 类库
  • CashFlowMvc.Domain.Tests - xUnit 测试项目
  • CashFlowMvc.Infra.Data - 类库
  • CashFlowMvc.Infra.IoC - 类库
  • CashFlowMvc.WebUI - webapp

在这种情况下发布结构看起来如何?

linux asp.net-core publish web-hosting clean-architecture
1个回答
0
投票

晚上好,今天早上我发现在我第一次发布项目的 Azure 中,他们有与 WebUI 项目发布完全相同的文件,这就是为什么当我运行命令时:

dotnet publish -c Release -r linux-x64

他已经在项目依赖项之上工作了。

我的问题是环境变量是如何保存在 Plesk for Linux 的 .NET Toolkit 中的,显然当服务器是 Windows 时它可以选择保存特定的 connectionString 变量,而在 Linux 中 Plesk 不提供这种类型的配置,我提供了将 connectionString 直接插入“appsettings.json”的测试成功了,但由于这不安全,我在 Infra.IoC 项目中进行了以下更改:

public static IServiceCollection AddInfrastructure(this IServiceCollection services,
                                                            IConfiguration configuration)
         {
             services.AddDbContext<ApplicationDbContext>(options =>
                 {
                     string connectionString = Environment.GetEnvironmentVariable("MysqlConnectionString");
                     options.UseMySql(connectionString,
                                     ServerVersion.AutoDetect(connectionString));
                 }
             );

于是我正常保存了环境变量,我只从WebUI项目中复制了publish文件就成功了。对于那些打算在 Azure 中进行的人来说,没有必要,但维护起来更昂贵,所以这里是提示!

爱德华多·罗德里戈·斯帕达

© www.soinside.com 2019 - 2024. All rights reserved.