2016-12-08 9 views
1

tool JNI4NETが私のC#アプリケーション内にあるJavaコードを使用できるように働いています。単純な初期テストとして、私は単一のクラスPersonと1つのメソッドpublic String GetName() { return "NoBody"; }を持つ単純なJavaクラスライブラリを作成しました。ここから私はJNIのダウンロードで与えられたサンプルと一緒に、generateProxies.cmdを編集してjarのDLLラッパーを作成しました。信頼できるアセンブリとしてバッチファイルを実行しているJNI4NETツールでC#プロキシDLLを生成できませんか?

私はこれに多大な運がなかったので、私は同じアクションを実行しようとしましたが、サンプル、具体的にはmyJavaDemoCalcというタイトルのサンプルでした。サンプルフォルダにgenerateProxies.cmdが実行されると、エラーがスローされます。

私はややそれが示唆するように、リモートソースからの読み込みを可能にするために、必ずしも安全であるならば、私はわからない意味を理解しながら、けれども私はthe link in the exceptionに従っている enter image description here

(必要であれば、私はこの絵を転写します)リンクされた記事の終わりに。

generateProxies.cmd、したがってProxyGen.exeが私のC:ドライブから実行されていることを見て、なぜ例外がスローされているのか混乱しています。

誰でも私が次に試すことができるか、またはここで問題を知ることができるのでしょうか?ここでは参考のため

myJavaDemoCalc

@echo off 
copy ..\..\lib\*.* work 
..\..\bin\proxygen.exe work\myJavaDemoCalc.jar -wd work 
cd work 
call build.cmd 
cd .. 

echo compiling usage 
csc.exe /nologo /warn:0 /reference:work\jni4net.n-0.8.8.0.dll /reference:work\myJavaDemoCalc.j4n.dll /out:work\demo.exe /target:exe MyCalcUsageInDotnet.cs 

答えて

2

からgenerateProxies.cmdソース私はあなたがそのzipファイルをダウンロードし、すぐにすべてのファイルを展開したと仮定しています。

しかし、そのzipファイルはインターネットである信頼できないゾーンから発信されたため、そのファイルも信頼できません。これにはゾーン識別子を持つ代替データストリームが含まれています。

これらのアセンブリがフレームワークによって読み込まれると、それらのアセンブリが信頼できるかどうかがチェックされます。そのゾーン識別子がまだ存在するアセンブリはロードされません。これは例外です。

System.IO.FileLoadException:ファイルまたはアセンブリ 'file:///jni4net.n-0.8.8.0.dll'またはその依存関係の1つを読み込めませんでした。操作はサポートされていません。 (HRESULTからの例外:0x80131515)--->
System.NotSupportedException:以前のバージョンの.NET Frameworkでアセンブリがサンドボックスになっていたネットワーク上の場所からアセンブリをロードしようとしました。今回の.NET Frameworkのリリースでは、デフォルトでCASポリシーが有効になっていないため、この負荷は危険です。この負荷がアセンブリをサンドボックス化するものでない場合は、loadFromRemoteSourcesスイッチを有効にしてください。あなたはすでに、すべてのファイルを抽出した場合

enter image description here

これを解決する最も簡単な解決策は、あなたがすべてのファイルを解凍ダウンロードしたzipファイルのプロパティウィンドウを開き、前unblockをチェックすることですフォルダには、powershellコマンドを使用できます。unblock-file

Get-ChildItem -Path 'c:\path\to\files' -Recurse | Unblock-File 

しかし、あなたは、あなたが信頼アセンブリと常に実行proxygen.exeなることを確信している場合は、既存のproxygen.exe.configでloadFromRemoteSources要素を追加することによって、MSDNの記事で提供される提案を追加することができます。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    <supportedRuntime version="v2.0.50727"/> 
    </startup> 
    <!-- trust all the thingz --> 
    <runtime> 
    <loadFromRemoteSources enabled="true"/> 
    </runtime> 
</configuration> 
+0

ありがとうございました!私は以前これまでに見たことがない、これ以上のことを読む必要があります。 – KDecker

関連する問題