2016-12-08 36 views
1

我正在努力使tool JNI4NET工作,以便我可以使用我的C#應用​​程序中的一些Java代碼。作爲一個簡單的初始測試,我創建了一個類Person的簡單Java類庫,其中一個方法爲public String GetName() { return "NoBody"; }。從這裏我一直跟着JNI下載中給出的示例編輯generateProxies.cmd來創建jar的DLL包裝器。使用JNI4NET工具無法生成C#代理DLL,將批處理文件作爲受信任的程序集運行?

我沒有太多運氣,所以我決定嘗試執行相同的操作,但與樣本,特別是標題爲myJavaDemoCalc的樣本。在示例文件夾中執行generateProxies.cmd時,會引發錯誤。

(我將錄製這張照片如果需要的話) enter image description here

我按照the link in the exception。不過在我有點明白是什麼意思,我不知道這是否是必要的安全,以便從遠程源加載因爲它表明在鏈接文章的末尾。

我也很困惑,看到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:無法加載文件或程序集「文件:///jni4net.n-0.8.8.0.dll」或它的一個依賴。操作不受支持。 (來自HRESULT的異常:0x80131515)--->
System.NotSupportedException:嘗試從網絡位置加載程序集,該程序集會導致程序集在以前版本的.NET Framework中被沙箱化。此版本的.NET Framework默認情況下不啓用CAS策略,因此此加載可能很危險。如果此加載不是爲了裝配沙盒,請啓用loadFromRemoteSources開關。

解決這個最快的解決辦法是打開下載的zip文件的屬性窗口和前打勾unblock你提取所有文件:

enter image description here

如果你已經提取的所有文件到一個文件夾你可以使用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

謝謝rene!我必須閱讀更多內容,這是我以前從未見過的。 – KDecker