Сбой HttpWebRequest за пределами MonoDevelop - PullRequest
0 голосов
/ 30 декабря 2011

Я написал метод отправки сообщения об ошибке через HTTP POST. Я использую OSX-Lion и MonoDevelop. Код работает, когда приложение вызывается из MonoDevelop. Когда я запускаю .app, он выдает исключение:

System.TypeInitializationException: An exception was thrown by the type initializer for System.Net.WebRequest ---> System.DllNotFoundException: libc.dylib
  at (wrapper managed-to-native) System.Platform:uname (intptr)
  at System.Platform.get_IsMacOS () [0x00000] in <filename unknown>:0 
  at System.Net.WebRequest..cctor () [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at ch.fangorn.LIF.Access.SubmitCrash.Submit (Int32 projectId) [0x00000] in <filename unknown>:0 

В данный момент я вызываю метод Submit напрямую, а не через catch. Так как это работает, когда отладчик подключен, я застрял. Что я до сих пор пробовал:

  1. Сборка моно-приложения (Создать установщик Mac)
  2. Создайте все с помощью Platform target x86
  3. Бета-версия Mono и MonoDevelop

Код, который IMO вызывает сбой.

HttpWebRequest hwr = WebRequest.Create(turi) as HttpWebRequest;
string authInfo = user + ":" + password;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
hwr.Headers["Authorization"] = "Basic " + authInfo;

hwr.Method = "POST";
hwr.ContentType = "text/xml";
hwr.ContentLength = encData.Length;

Stream send = hwr.GetRequestStream();
send.Write(encData, 0, encData.Length);
send.Close();
hwr.GetResponse();

MonoDevelop: 2.8.5
Моно: 2.10.8

1 Ответ

0 голосов
/ 04 января 2012

Симптом: Системные библиотеки не найдены (System.DllNotFoundException: libc.dylib) при запуске моно .app .app вне MonoDevelop.

В скрипте-обертке, созданном моно, разработайте: MyApp.app/Contents / MacOS / MyApp DYLD_FALLBACK_LIBRARY_PATH устанавливается без включения по умолчанию.Так как пустой DYLD_FALLBACK_LIBRARY_PATH означает значение по умолчанию, это удалит значение по умолчанию.Системные библиотеки не могут быть найдены.

В моем варианте строка должна быть:

export DYLD_FALLBACK_LIBRARY_PATH="$MONO_FRAMEWORK_PATH/lib:$DYLD_FALLBACK_LIBRARY_PATH:$(HOME)/lib:/usr/local/lib:/lib:/usr/lib"

Или проверка, если DYLD_FALLBACK_LIBRARY_PATH пуста, была бы еще лучше.

Я подал aотчет об ошибке: http://bugzilla.xamarin.com/show_bug.cgi?id=2727

...