【问题标题】:HttpWebRequest crashing outside MonoDevelopHttpWebRequest 在 MonoDevelop 之外崩溃
【发布时间】:2011-12-30 15:04:22
【问题描述】:

我编写了一个通过 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();

单声道开发:2.8.5
单声道:2.10.8

【问题讨论】:

  • 您是否尝试过查看您的参考资料?我有必要在 MonoDevelop 中多次删除和读取对 System.Web 和其他人的引用,尽管版本较旧,但具有相同的奇怪错误模式。
  • 我用最少的参考建立了一个简化的样本。现在我收到了更好的错误消息:System.DllNotFoundException: libc.dylib
  • 啊,好多了。请尝试更新所有 dylib 缓存 - 我不是 OSX 人,但在最近更新的系统上构建 Gtk#/Mono 应用程序时我遇到了类似的问题。
  • 我发现了问题:假设 DYLD_FALLBACK_LIBRARY_PATH 已设置,包装脚本会覆盖 DYLD_FALLBACK_LIBRARY_PATH。但似乎一个空的 DYLD_FALLBACK_LIBRARY_PATH 意味着使用默认值。所以它删除了默认值和任何找到 libc 的可能性。我更改了该行以包含记录的默认值。您认为这是一个好的解决方案吗?
  • 是的,如果你把它作为最后一项包含进来

标签: mono osx-lion monodevelop


【解决方案1】:

症状:未找到系统库(System.DllNotFoundException:libc.dylib) 当 Mono 创建的 .app 在 MonoDevelop 之外启动时。

在mono develop 创建的包装脚本中: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 是否为空会更好。

我提交了错误报告:http://bugzilla.xamarin.com/show_bug.cgi?id=2727

【讨论】:

  • 该错误已修复。 MonoDevelop 的下一个版本有望包含修复。
猜你喜欢
  • 2017-08-13
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多