Я пишу код с помощью версии сообщества VS 2017 для Mac и пытаюсь получить доступ к BLOB-объекту в учетной записи хранения Azure. Однако у меня возникают исключения, как показано в приведенном ниже коде.
Версия 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 core 2. Консольное приложение .Net (под опцией .Net) - С чем это противоречит?
Спасибо
@CamiloTerevinto Я внес необходимые изменения.
@GauravMantri Я также добавил версию пакета для версии WindowsAzure.Storage.
Спасибо! Я пытаюсь воспроизвести его, но не могу найти Microsoft.Azure в пакетах Nuget. Можете ли вы сказать мне, какой пакет вы для этого установили?
@GauravMantri Я установил Microsoft.WindowsAzure.ConfigurationManager (v 3.2.3). Надеюсь это поможет.
Я нашел одно решение, но оно не позволяет мне использовать файл app.config. Когда я удалил пакет CloudConfigurationManager и напрямую использовал строку подключения, он заработал. Это CloudConfigurationManager, который вызывает проблему на Mac. Я все еще ищу информацию о том, как читать app.config для приложения .Net на Mac.





Как вы упомянули, Microsoft.WindowsAzure.ConfigurationManager - это пакет .NET Framework, это не совместим с базовой платформой .net.
I am still looking for information on how to read app.config for .Net application on Mac
Для этого вы можете использовать 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.
All that’s required is to add the following NuGet packages and an appsettings.json file.
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 core. В версии сообщества VS 2017 для OSX я использую консольный проект под .net. Существует отдельный проект консоли ядра .Net. Мне нужно продолжить исследование разницы между ними.
@raringsunny. Да, он должен работать на Mac. Вам необходимо создать основной проект .net. И вы можете получить больше информации о ядре .net из этого гид
Спасибо, @Tom попробует.
Есть ли у вас обновления по этому поводу? Если это будет полезно, вы можете отметить это как ответ.
У меня еще не было возможности попробовать это. Попробую на этой неделе
еще одна вещь, я предполагаю, что я использую проект ядра без aspnet (вероятно, моно). Пожалуйста, имейте это в виду
По опыту могу сказать, что он работает на Mac (VS 2017). Отредактируйте свой вопрос и включите версию пакета
WindowsAzure.Storage, которую вы установили.