【问题标题】:How to use .NET WebClient calls in Clojure-CLR 1.4.1如何在 Clojure-CLR 1.4.1 中使用 .NET WebClient 调用
【发布时间】:2013-01-22 05:25:36
【问题描述】:

在问题中:Idiomatic way to write .NET interop function我找到了以下代码段:

(import '(System.Net HttpWebRequest NetworkCredential)
        '(System.IO StreamReader))

当我启动 REPL 并输入时:

(import '(System.IO StreamReader))

一切正常。但是当我进入时:

(import '(System.Net HttpWebRequest))

(我不需要 NetworkCredential 功能)我得到:

My.ns=> (import '(System.Net HttpWebRequest))
Bad type
NullReferenceException Object reference not set to an instance of an object.  cl
ojure.lang.Util.NameForType (D:\work\clojure-clr-1.4.1-fix\Clojure\Clojure\Lib\U
til.cs:729)

哦,我之前做过:

My.ns=> (System.Reflection.Assembly/LoadWithPartialName "System.Net")
#<RuntimeAssembly System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b
03f5f7f11d50a3a>

那么我还需要做什么?感谢您的帮助。

【问题讨论】:

  • 你可以试试(import 'System.Net.HttpWebRequest)

标签: clojure clojureclr


【解决方案1】:

这是 1.4 中的错误。它来自于未正确处理可从多个程序集访问的类型。在这种情况下,System.Net.HttpWebRequestSystem 程序集中。在加载 System.Net 程序集之前导入该类可以正常工作。加载System.Net 程序集后,可以从两个程序集访问HttpWebRequest(感谢TypeForwardedTo 中的System.Net 属性)。在 ClojureCLR 1.4.1 中,没有正确处理。

解决方案:

  1. 要么不加载System.Net,要么导入HttpWebRequest 在这样做之前。
  2. 下载最新版本的 ClojureCLR -- 错误已修复。
  3. 如果您需要保留 1.4.1 并且可以构建它 你自己,这是一个单行修复。看着 https://github.com/clojure/clojure-clr/commit/38c34c2a60a63d5933386e412a250c5e8b879d5b .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多