linux 用Clean Architecture发布ASP NET Core

vlurs2pr  于 2023-04-05  发布在  Linux
关注(0)|答案(1)|浏览(81)

我使用Clean Architecture开发了一个.NET Core 6项目,在GIT中发布,并在免费的Linux服务器上在Azure中实现。
CashFlowMJV on GITCashFlowMJV on Azure
由于Azure中的实现是自动的,我不确定服务器内部发布的每个层的文件是如何排列的。
我有一个VPS,我安装了Plesk Obsidian管理面板,我正确配置了.NET Toolkit。我创建了一个简单的Web应用程序并运行了以下命令:
dotnet publish -c Release -r linux-x64
该命令在项目内部生成了目录“\bin\Release\net 6.0\linux-x64\publish”,我复制了这些文件并将它们移动到“httpdocs”,并将初始文件指向“webapp.dll”。测试项目运行良好。
但是我无法在该服务器上使用Clean Architecture部署我的项目,我不知道文件夹和文件应该如何显示,因为每个层都会生成不同的发布目录。系统的每个层都是一个.NET Core子项目,其中:

  • CashFlowMvc.Domain - classlib
  • CashFlowMvc.应用程序- classlib
  • CashFlowMvc.Domain.Tests - xUnit测试项目
  • CashFlowMvc.Infra.Data - classlib
  • CashFlowMvc.Infra.IoC - classlib
  • CashFlowMvc.WebUI - webapp

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

ws51t4hk

ws51t4hk1#

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

dotnet publish -c Release -r linux-x64

他已经在项目依赖项之上工作了。
我的问题是环境变量如何保存在Plesk for Linux的.NET工具包中,显然当服务器是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项目复制了发布文件,并且成功了。对于那些打算在Azure中做这件事的人来说,没有必要,但是维护起来更昂贵,所以这里是提示!
爱德华多·罗德里戈·斯帕达

相关问题