2

Я создаю новое приложение AspNetCore для macOS и добавлю пакет EF Core. я пытаюсь сохранить данные в базу данных с помощью метода SaveChanges() (DbContext класса) и получить следующую ошибку:asp.net core и System.Security.Cryptography.Native.Apple

"System.DllNotFoundException: Unable to load DLL 'System.Security.Cryptography.Native.Apple': The specified module could not be found."

установить OpenSSL, используя следующие инструкции:

  1. обновление заварить
  2. заварить установить OpenSSL
  3. пер -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib/USR/местные/Библиотека/
  4. пер -s/USR/местные/Opt/OpenSSL/Библиотека/libssl. 1.0.0.dylib/usr/local/l И.Б./

ОС: MacOS (10.12.1)

project.json:

{ 
    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.1", 
     "type": "platform" 
    }, 
    "Microsoft.AspNetCore.Mvc": "1.0.1", 
    "Microsoft.AspNetCore.Routing": "1.0.1", 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1", 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0", 
    "Microsoft.Extensions.Logging": "1.1.0-preview1-final", 
    "Microsoft.Extensions.Logging.Console": "1.1.0-preview1-final", 
    "Microsoft.Extensions.Logging.Debug": "1.1.0-preview1-final", 
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
    "Microsoft.EntityFrameworkCore": "1.1.0-preview1-final", 
    "Microsoft.Extensions.Logging.Abstractions": "1.1.0-preview1-final", 
    "Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.2", 
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final", 
    "Npgsql.EntityFrameworkCore.PostgreSQL.Design": "1.0.2", 
    "Microsoft.EntityFrameworkCore.Design": "1.1.0-preview1-final" 
    }, 
    "tools": { 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final", 
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final", 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview3-final", 
     "imports": [ 
     "portable-net45+win8+dnxcore50", 
     "portable-net45+win8" 
     ] 
    } 
    }, 
    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6", 
     "portable-net45+win8" 
     ], 
     "buildOptions": { 
     "emitEntryPoint": true 
     } 
    } 
    }, 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 
    "runtimeOptions": { 
    "configProperties": { 
     "System.GC.Server": true 
    } 
    }, 
    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "**/*.cshtml", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 
    "scripts": { 
    "postpublish": [ 
     "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" 
    ] 
    }, 
    "tooling": { 
    "defaultNamespace": "TTT" 
    } 
} 

Кто-нибудь есть идея, что я делаю не так?

Спасибо.

UPDATE (добавить стек информация трассировки)

fail: Microsoft.AspNetCore.Server.Kestrel[13] 
     Connection id "0HL01MGG6QKIE": An unhandled exception was thrown by the application. 
System.DllNotFoundException: Unable to load DLL 'System.Security.Cryptography.Native.Apple': The specified module could not be found. 
(Exception from HRESULT: 0x8007007E) 
    at Interop.AppleCrypto.DigestCreate(PAL_HashAlgorithm algorithm, Int32& cbDigest) 
    at Internal.Cryptography.HashProviderDispenser.AppleDigestProvider..ctor(PAL_HashAlgorithm algorithm) 
    at Internal.Cryptography.HashProviderDispenser.CreateHashProvider(String hashAlgorithmId) 
    at System.Security.Cryptography.MD5.Implementation..ctor() 
    at Npgsql.FrontendMessages.PasswordMessage.CreateMD5(String password, String username, Byte[] serverSalt) 
    at Npgsql.NpgsqlConnector.ProcessAuthenticationMessage(String username, AuthenticationRequestMessage msg) 
    at Npgsql.NpgsqlConnector.HandleAuthentication(String username, NpgsqlTimeout timeout) 
    at Npgsql.NpgsqlConnector.Open(NpgsqlTimeout timeout) 
    at Npgsql.ConnectorPool.Allocate(NpgsqlConnection conn, NpgsqlTimeout timeout) 
    at Npgsql.NpgsqlConnection.OpenInternal() 
    at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open() 
    at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel) 
    at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(Tuple`2 parameters) 
    at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1 entriesToSave) 
    at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess) 
    at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) 
    at TTT.Controllers.ValuesController.Get(Int32 id) in /Users/cmaker-note/Projects/AspNetCore/TTT/Controllers/ValuesController.cs:line 26 
    at lambda_method(Closure , Object , Object[]) 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionFilterAsync>d__28.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeAsync>d__18.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.<Invoke>d__3.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.<RequestProcessingAsync>d__2.MoveNext() 
+0

Я предполагаю, что время выполнения .NET Core правильно установлено? – Tseng

+0

Да. Я использую эту инструкцию (https://www.microsoft.com/net/core#macos). – CMaker

ответ

1

Я думаю, вы пропустили один step.Here это:

brew link --force openssl 

Все шаги:

brew update 
brew install openssl 
brew link --force openssl 

Ссылка :dotnet restore (OSX)

+0

Нет, это не помогает мне. После команды exec («brew link --force openssl») у меня есть сообщение: «Связывание keg-only openssl означает, что вы можете связать себя с небезопасным ...». Я начинаю искать это сообщение и обнаружил эту проблему https://github.com/dotnet/cli/issues/3964#issuecomment-236493536. Я думаю, это связано с ошибкой. – CMaker

+0

Вы тоже видели ссылку на мой пост выше? – Sampath

+0

Да, я сеял его и попробовал команды exec. – CMaker

1

Я была такая же проблема сегодня, когда я обновил этот

"Microsoft.Extensions.Logging": "1.0.0", 
"Microsoft.Extensions.Logging.Console": "1.0.0", 
"Microsoft.Extensions.Logging.Debug": "1.0.0", 

в

"Microsoft.Extensions.Logging": "1.1.0-preview1-final", 
"Microsoft.Extensions.Logging.Console": "1.1.0-preview1-final", 
"Microsoft.Extensions.Logging.Debug": "1.1.0-preview1-final", 

Когда я вернулся обратно к версии 1.0.0 для всех трех он работал снова.

Причина я модернизировал потому, что я добавил ссылку на эту

"Microsoft.EntityFrameworkCore.Design": "1.1.0-preview1-final" 

и хотел версии 1.1. * Для

"Microsoft.Extensions.Logging" 

Во всяком случае, я понизил

"Microsoft.EntityFrameworkCore.Design": "1.1.0-preview1-final" 

в

"Microsoft.EntityFrameworkCore.Design": "1.0.1" 

И все снова сработало для меня. Я ожидаю, что этот вопрос исчезнет, ​​когда 1.1. * Готов к прайм-тайму.

0

Убедитесь

ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/ 
ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/ 

фактически указывают на действительные файлы. Для меня доморощенный установил пакет openssl, но не связал его. Какой я считаю, что:

brew link --force openssl 

делает. Но homebrew отказывается делать это автоматически из-за соображений безопасности. Поэтому, если вы просто хотите попробовать .NetCore, вы можете просто указать фактическое место установки. Который является следующим:

/usr/local/Cellar/openssl/1.0.2k 

, где оно было для меня.