不能生成C#代理DLL与JNI4NET工具,运行batch file作为受信任的程序集?

我正在努力让工具JNI4NET工作,以便我可以使用我的C#应用​​程序中的一些Java代码。 作为一个简单的初始testing,我用一个方法创build了一个简单的Java类库,只有一个类Person public String GetName() { return "NoBody"; } public String GetName() { return "NoBody"; } 。 从这里我一直跟着在JNI下载中给出的示例编辑generateProxies.cmd来创buildjar的DLL包装。

我没有太多的运气,所以我决定尝试执行相同的操作,但与样本,特别是标题为myJavaDemoCalc的示例。 在示例文件夹中执行generateProxies.cmd ,会引发错误。

(如果需要,我会转录这张照片) 在这里输入图像说明

我已经在例外中的链接,虽然我有点明白这是什么意思,我不知道是否必须从远程来源加载是必要的,正如它在链接文章的末尾所暗示的。

我也很困惑,为什么看到generateProxies.cmd和ProxyGen.exe正在从我的C:驱动器运行引发exception。

任何人都有一个想法,我可以尝试下一个或知道这里的问题?

这里的参考是来自myJavaDemoCalcgenerateProxies.cmdmyJavaDemoCalc

 @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 

我假设你下载了该zip文件,然后立即提取所有文件。

但是,由于该zip文件确实源自不受信任的区域,即互联网,其中的文件也将不受信任。 它包含具有区域标识符的备用数据流。

当这些程序集被框架加载时,它会检查它们是否可信。 具有该区域标识符的程序集仍然存在不会被加载。 这是你得到的例外:

System.IO.FileLoadException:无法加载文件或程序集“file:/// jni4net.n-0.8.8.0.dll”或它的一个依赖项。 操作不受支持。 (从HRESULT异常:0x80131515)—>
System.NotSupportedException:尝试从网络位置加载程序集,该程序集会导致程序集在早期版本的.NET Framework中被沙箱化。 此版本的.NET Framework默认情况下不启用CAS策略,因此此加载可能很危险。 如果此加载不是为了装配沙盒,请启用loadFromRemoteSources开关。

解决此问题的最快解决方案是打开下载的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>