【发布时间】: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。因为它在附加调试器时工作,所以我被困住了。到目前为止我尝试过的:
- 构建单声道应用程序包(创建 mac 安装程序)
- 使用 Platform target x86 构建一切
- 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