【问题标题】:Accessing Azure storage account from console app on OSX (Mac)从 OSX (Mac) 上的控制台应用程序访问 Azure 存储帐户
【发布时间】:2018-04-15 12:59:48
【问题描述】:

我正在使用适用于 Mac 的 VS 2017 社区版编写代码并尝试访问 Azure 存储帐户上的 Blob。但是,我遇到了异常,如下面的代码所示。

WindowsAzure.Storage 版本为 9.1.1

using System;
using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;

namespace storageaccount
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            var storageAccount = CloudStorageAccount.Parse(
                CloudConfigurationManager.GetSetting("StorageConnection"));

            //var blobClient = storageAccount.CreateCloudBlobClient();

            //var container = blobClient.GetContainerReference("images");

               //container.CreateIfNotExists(Microsoft.WindowsAzure.Storage.Blob.BlobContainerPublicAccessType.Blob);

        //Console.ReadKey();
        }
    }
}

上述代码抛出异常:

System.DllNotFoundException: fusion.dll
  at at (wrapper managed-to-native) Microsoft.Azure.NativeMethods.CreateAssemblyCache(Microsoft.Azure.NativeMethods/IAssemblyCache&,int)
  at Microsoft.Azure.NativeMethods.GetAssemblyPath (System.String name) [0x00037] in <bcbac5dcfbdd47eabe8212983b7d996d>:0
  at Microsoft.Azure.AzureApplicationSettings.GetServiceRuntimeAssembly () [0x0000d] in <bcbac5dcfbdd47eabe8212983b7d996d>:0
  at Microsoft.Azure.AzureApplicationSettings..ctor () [0x0001a] in <bcbac5dcfbdd47eabe8212983b7d996d>:0
  at Microsoft.Azure.CloudConfigurationManager.get_AppSettings () [0x0001e] in <bcbac5dcfbdd47eabe8212983b7d996d>:0
  at Microsoft.Azure.CloudConfigurationManager.GetSetting (System.String name, System.Boolean outputResultsToTrace) [0x00039] in <bcbac5dcfbdd47eabe8212983b7d996d>:0
  at Microsoft.Azure.CloudConfigurationManager.GetSetting (System.String name) [0x00000] in <bcbac5dcfbdd47eabe8212983b7d996d>:0
  at storageaccount.MainClass.Main (System.String[] args) [0x00001] in /Users/Projects/storageaccount/storageaccount/Program.cs:11

代码有什么问题?我正在使用 Nuget 包访问云存储帐户。从抛出的异常来看,不清楚 OSx 是否支持。

感谢任何帮助。

附加信息: 在创建新项目时,我看到 VS 2017(适用于 Mac)中有两个项目选项。 1. .Net核心控制台应用 2. .Net 控制台应用程序(在 .Net 选项下) - 这会针对什么运行?

谢谢

【问题讨论】:

  • 我可以从经验中看出它适用于 Mac (VS 2017)。请编辑您的问题并包含您已安装的 WindowsAzure.Storage 的软件包版本。
  • @CamiloTerevinto 我已经进行了必要的更改。
  • @GauravMantri 我还添加了 WindowsAzure.Storage 版本的包版本。
  • 谢谢!我正在尝试重现它,但我无法在 Nuget 包下找到 Microsoft.Azure。你能告诉我你为此安装了哪个软件包吗?
  • @GauravMantri 我已经安装了 Microsoft.WindowsAzure.ConfigurationManager (v 3.2.3)。希望这会有所帮助。

标签: c# macos azure .net-core azure-storage


【解决方案1】:

正如您提到的,Microsoft.WindowsAzure.ConfigurationManager 是.net framework 包,它不兼容.net 核心平台

我仍在寻找有关如何在 Mac 上为 .Net 应用程序读取 app.config 的信息

您可以使用System.Configuration.ConfigurationManager 来执行此操作。

 var storeageString = ConfigurationManager.AppSettings["storagestring"];

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="storagestring" value ="Test string"/>
  </appSettings>
</configuration>

另一种方法是您可以将 appsettings.json 添加到 .NET Core 控制台应用程序。

只需添加以下 NuGet 包和 appsettings.json 文件。

  • Microsoft.Extensions.Configuration

  • Microsoft.Extensions.Configuration.FileExtensions

  • Microsoft.Extensions.Configuration.Json

演示代码

var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json");
IConfigurationRoot configuration = builder.Build();
var connectionString = configuration["StorageConnection"];
Console.WriteLine(connectionString);

appsettings.json 文件:

{
    "StorageConnection": "Test Connection string"
}

【讨论】:

  • 感谢您的回复。您提供的解决方案可以在 Mac 上运行吗?我的项目不是 .net 核心控制台应用程序。在 OSX 的 VS 2017 社区版中,我在 .net 下使用控制台项目。有一个单独的 .Net 核心控制台项目。我需要进一步研究两者之间的区别。
  • @raringsunny。是的,它应该可以在 Mac 上运行。您需要创建 .net 核心项目。您可以从guide 获得有关 .net 核心的更多信息
  • 感谢@Tom 会尝试一下。
  • 您对此有任何更新吗?如果有用,您可以将其标记为答案。
  • 还没有机会尝试一下。这周会试一试
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2022-10-06
  • 2020-06-01
  • 2021-10-12
  • 2019-08-10
相关资源
最近更新 更多