1

質問: Idiomatic way to write .NET interop functionで、次のコード セグメントを見つけました。

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

REPL を開始して入力すると、次のようになります。

(インポート '(System.IO StreamReader))

大丈夫。しかし、私が入ると:

(インポート '(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>

それで、私は他に何をする必要がありますか?助けてくれてありがとう。

4

1 に答える 1

1

これは 1.4 のバグです。これは、複数のアセンブリからアクセスできる型を適切に処理していないことが原因です。この場合、System.Net.HttpWebRequestSystemアセンブリにあります。アセンブリをロードする前にそのクラスをインポートすると、System.Net問題なく機能します。System.Netアセンブリをロードした後、 は 2 つのアセンブリからアクセスできます ( の属性HttpWebRequestのおかげです)。ClojureCLR 1.4.1 では、これは適切に処理されません。TypeForwardedToSystem.Net

ソリューション:

  1. ロードしないか、ロードする前にSystem.Netインポートを実行してくださいHttpWebRequest
  2. ClojureCLR の最新バージョンをダウンロードしてください。バグは修正されています。
  3. 1.4.1 を使い続ける必要があり、自分でビルドできる場合は、1 行で修正できます。https://github.com/clojure/clojure-clr/commit/38c34c2a60a63d5933386e412a250c5e8b879d5bを見て ください 。
于 2013-01-24T05:06:10.710 に答える