我使用 .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子项目,其中:
在这种情况下发布结构看起来如何?
晚上好,今天早上我发现在我第一次发布项目的 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 中进行的人来说,没有必要,但维护起来更昂贵,所以这里是提示!
爱德华多·罗德里戈·斯帕达