2017-01-29 3 views
1

Я развиваю спокойную службу с Visual Studio для Mac. Чтобы подключиться к моему локальному экземпляру MongoDB (который запущен и работает), я установил пакет MongoDB NuGet. Классы ссылаются правильно в коде, однако, как только я пытаюсь выполнить соединение он реагирует со следующей ошибкой:.NET на OSX (Mono): не удается подключиться к MongoDB

{ 
    "Message": "An error has occurred.", 
    "ExceptionMessage": "An error occurred when trying to create a controller of type 'BalanzaController'. Make sure that the controller has a parameterless public constructor.", 
    "ExceptionType": "System.InvalidOperationException", 
    "StackTrace": " at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (System.Net.Http.HttpRequestMessage request, System.Web.Http.Controllers.HttpControllerDescriptor controllerDescriptor, System.Type controllerType) [0x000f3] in <f99f496cb0d249c1a945c1fcabce1695>:0 \n at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController (System.Net.Http.HttpRequestMessage request) [0x00028] in <f99f496cb0d249c1a945c1fcabce1695>:0 \n at System.Web.Http.Dispatcher.HttpControllerDispatcher+<SendAsync>d__1.MoveNext() [0x000a9] in <f99f496cb0d249c1a945c1fcabce1695>:0 ", 
    "InnerException": { 
     "Message": "An error has occurred.", 
     "ExceptionMessage": "ntdll.dll", 
     "ExceptionType": "System.DllNotFoundException", 
     "StackTrace": " at (wrapper managed-to-native) Interop+NtDll:RtlGetVersion (Interop/NtDll/RTL_OSVERSIONINFOEX&)\n at Interop+NtDll.RtlGetVersion() [0x0001a] in <f13660f89d0d419fba4e315693dd26ea>:0 \n at System.Runtime.InteropServices.RuntimeInformation.get_OSDescription() [0x00007] in <f13660f89d0d419fba4e315693dd26ea>:0 \n at MongoDB.Driver.Core.Connections.ClientDocumentHelper.CreateOSDocument() [0x00042] in <2c531fdd26874b5eb450bd126d409101>:0 \n at System.Lazy`1[T].CreateValue() [0x00075] in /private/tmp/source-mono-4.8.0/bockbuild-mono-4.8.0-branch/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/referencesource/mscorlib/system/Lazy.cs:437 " 
    } 
} 

Это как-то не удается при поиске нужного файла DLL (или его корреспондента в среде Mono).

Как это исправить?

Благодаря

+0

Что полное имя пакета NuGet вы добавили? Не все могут быть использованы в Mono. –

+0

'MongoDB.Driver', который, как утверждается, является официальным. Это то, что я получаю в 'package.config': balanza

+0

Тогда ваш пакет.config ошибочен. «net45» означает .NET Framework 4.5 и выше, что является только Windows. Чтобы использовать его в Mono, вам необходимо изменить targetFramework на .NET Standard, http://mongodb.github.io/mongo-csharp-driver/2.4/getting_started/installation/, а затем вручную отредактировать файлы csproj, чтобы исправить ссылочные сборки. NuGet, возможно, подумал о Mono == .NET Framework, но это не так. –

ответ

1

я получил точно такое же исключение на Raspberry PI 3 (ARMv7) с помощью Mono JIT компилятор версии 4.6.2. Понижение драйверов MongoDB C# с 2.4.X до 2.3.0 решило проблему для меня.

Существует также открытый вопрос здесь: https://jira.mongodb.org/browse/CSHARP-1875

Смежные вопросы