c# - 构建一个 C# 应用程序,使其根据运行的云使用 s3 或 blob

标签 c# .net amazon-web-services azure

我正在构建 C# Web 应用程序。我的 Web 应用程序可以部署在 Azure 和 AWS 上。

挑战就像我的应用程序需要 Blob 存储(例如 Azure Blob 和 AWS S3)。

现在我正在使用存储库模式,并且添加了 Azure SDK 和 AWS SDK。

但要求是构建 2 个镜像,以便 Azure 镜像应具有 Azure SDK,而 AWS 镜像应仅具有 AWS SDK。

有什么具体的方法来解决这种情况吗?

在 C++ 中,我们有编译器标志,以便我们可以跳过编译中的某些代码部分。将代码编译为 IL 时,C# 中是否有可用的此类选项。

注意:如果是,那么我将使用 2 个标志,以便为 Azure 构建一个代码,为 AWS 构建另一个代码。

最佳答案

您可以通过定义自定义常量来做到这一点,请参阅 msbuild, defining Conditional Compilation Symbols以及其他。

创建三个类库:

  • YourLib.Abstractions:存储接口(interface)
  • YourLib.AWS:AWS 实现
  • YourLib.Azure:Azure 的实现

然后您的主应用程序在 .csproj 中有条件地包含引用:

<ItemGroup>
   <ProjectReference Include="../YourLib.Abstractions/YourLib.Abstractions.csproj" />
</ItemGroup>

<ItemGroup Condition="$(DefineConstants.Contains('AWS_BLOBS'))">
   <ProjectReference Include="../YourLib.AWS/YourLib.AWS.csproj" />
</ItemGroup>

<ItemGroup Condition="$(DefineConstants.Contains('AZURE_BLOBS'))">
   <ProjectReference Include="../YourLib.Azure/YourLib.Azure.csproj" />
</ItemGroup>

并在您的代码中调用适当的依赖项注入(inject)逻辑:

#if AWS_BLOBS
services.AddAwsBlobs();
#endif

#if AZURE_BLOBS
services.AddAzureBlobs();
#endif

然后编译时:

dotnet build /p:DefineConstants="AWS_BLOBS"

您还可以创建解决方案级构建配置(“调试:AWS”、“调试:Azure”)并在其中定义常量。

关于c# - 构建一个 C# 应用程序,使其根据运行的云使用 s3 或 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75664423/

相关文章:

c# - 在 NUnit.ConsoleRunner.3.2.1 中运行测试时,NUnit 运行器失败

c# - CRM 2011 - 映射

c# - 在 WinForms 中数据绑定(bind)一组单选按钮的最佳方法

c# - ASP.Net MVC C# 另一个 View 模型中的两个 View 模型 - 如何在 View 中引用

.net - 将@section 放入@if .net mvc 3

c# - 即使发生未处理的异常,也要保持应用程序运行

amazon-web-services - 将 CORS 选项添加到 AWS websocket API 网关

amazon-web-services - 电子邮件模板中的 For 循环

.net - 在 ASP.NET Core : "no such file or directory" error 中构建 docker

amazon-web-services - 如何在嵌套服务调用链中实现弹性(重试)