首页 新闻 会员 周边 捐助

.net core 使用IKVM 调用 Java 代码

0
[待解决问题]

.net core 使用IKVM 调用 Java 代码 ,生成时提示
IKVMSDK0012 The IkvmReference jar\bcpkix-jdk15on-161.jar is missing
IKVMSDK0013 The IkvmReference jar\bcpkix-jdk15on-161.jar is missing
这个可能是什么原因?

笑叹、的主页 笑叹、 | 初学一级 | 园豆:34
提问于:2023-03-23 11:55
< >
分享
所有回答(2)
0

根据错误提示,IKVM 缺少 bcpkix-jdk15on-161.jar 文件,这可能是因为该文件不存在或未在正确的位置中。你需要确保该文件存在于指定的文件夹中。

你可以尝试以下方法解决该问题:

确保 bcpkix-jdk15on-161.jar 存在于正确的文件夹中。可以检查一下引用的路径是否正确,或者手动将文件复制到正确的文件夹中。

如果你是使用 Maven 或 Gradle 进行依赖管理,可以尝试清除本地仓库并重新构建项目,以确保所有依赖项都正确下载。

如果你使用的是 Visual Studio,可以尝试在项目的属性页中检查引用的路径是否正确,并尝试手动添加缺失的依赖项。

最后,你可以考虑更新 IKVM 版本,以便获得更稳定和兼容性更好的版本。

火星包up | 园豆:202 (菜鸟二级) | 2023-03-23 14:00

这个使用的是最新版的ikvm,我用命令行执行也是报错
System.IO.FileNotFoundException: netstandard
at IKVM.Reflection.Universe.Load(String refname, Module requestingModule, Boolean throwOnError) in D:\a\ikvm\ikvm\src\IKVM.Reflection\Universe.cs:line 788
at IKVM.Internal.AssemblyResolver.Init(Universe universe, Boolean nostdlib, IList1 references, IList1 userLibPaths) in D:\a\ikvm\ikvm\src\ikvmc\IKVM\Internal\AssemblyResolver.cs:line 93
at ikvmc.IkvmcCompiler.Compile(String[] args) in D:\a\ikvm\ikvm\src\ikvmc\IkvmcCompiler.cs:line 178
at ikvmc.IkvmcCompiler.Main(String[] args) in D:\a\ikvm\ikvm\src\ikvmc\IkvmcCompiler.cs:line 112

支持(0) 反对(0) 笑叹、 | 园豆:34 (初学一级) | 2023-03-24 09:49

@笑叹、: 这个错误提示表明系统无法找到名为 netstandard 的程序集。这可能是因为您的环境中没有安装 .NET Core 的 SDK,或者是某些文件损坏或缺失所导致的。

为了解决这个问题,您可以尝试以下步骤:

确保您的系统中已经安装了 .NET Core SDK。您可以在 Microsoft 官网上下载和安装最新版本的 .NET Core SDK。

如果您已经安装了 .NET Core SDK,尝试重新安装它以修复任何可能的文件损坏或缺失。

如果您仍然遇到问题,请尝试重新安装 IKVM,确保您使用的是最新版本的 IKVM,并且所有依赖项都已正确安装。

最后,您也可以尝试使用 Visual Studio 进行构建,因为它可能会自动处理依赖项和构建路径等问题。

如果以上步骤仍然无法解决问题,请提供更多的错误信息,以便我更好地理解问题的性质和根本原因

支持(0) 反对(0) 火星包up | 园豆:202 (菜鸟二级) | 2023-03-24 09:52

@火星包up: 使用ikvm-8.1.5717.0的执行包,使用命令将jar包成功转换成.net可使用dll,在mvc中调用成功,但这不是我想要的,我想在core中使用,因为我需要在linux上部署程序。下载了8.2.1和8.4.5的执行包,安装了.net core 的sdk,最后使用命令执行时都是提示

 ikvmc -target:library gson-2.8.5.jar
System.IO.FileNotFoundException: netstandard
at IKVM.Reflection.Universe.Load(String refname, Module requestingModule, Boolean throwOnError) in D:\a\ikvm\ikvm\src\IKVM.Reflection\Universe.cs:line 788
at IKVM.Internal.AssemblyResolver.Init(Universe universe, Boolean nostdlib, IList1 references, IList1 userLibPaths) in D:\a\ikvm\ikvm\src\ikvmc\IKVM\Internal\AssemblyResolver.cs:line 93
at ikvmc.IkvmcCompiler.Compile(String[] args) in D:\a\ikvm\ikvm\src\ikvmc\IkvmcCompiler.cs:line 178
at ikvmc.IkvmcCompiler.Main(String[] args) in D:\a\ikvm\ikvm\src\ikvmc\IkvmcCompiler.cs:line 112 

最后尝试在Visual Studio中安装IKVM8.4.5,在csproj中添加

  <ItemGroup>
    <IkvmReference Include="jar/gson-2.8.5.jar" />
    <IkvmReference Include="jar/commons-codec-1.11.jar" />
    <IkvmReference Include="jar/bcprov-jdk15on-161.jar" />

    <IkvmReference Include="jar/bcpkix-jdk15on-161.jar">
      <AssemblyName>bcpkix</AssemblyName>
      <AssemblyVersion>1.0.0.0</AssemblyVersion>
      <References>jar/bcprov-jdk15on-161.jar;</References>
    </IkvmReference>

    <IkvmReference Include="jar/WeWorkLocalSdk.jar">
      <AssemblyName>WeWorkLocalSdk</AssemblyName>
      <AssemblyVersion>1.0.0.0</AssemblyVersion>
      <References>jar/gson-2.8.5.jar;jar/commons-codec-1.11.jar;jar/bcprov-jdk15on-161.jar;jar/bcpkix-jdk15on-161.jar;        </References>
    </IkvmReference>
  </ItemGroup>

重新生成解决方案提示下面错误

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	IKVMSDK0013	The IkvmReference jar\bcprov-jdk15on-161.jar is missing AssemblyFileVersion.	Tenecnt.Api	C:\Users\Tencent\.nuget\packages\ikvm\8.5.0-develop0690\buildTransitive\netstandard2.0\IKVM.targets	28	
错误	IKVMSDK0003	The IkvmReference jar\bcprov-jdk15on-161.jar has invalid AssemblyVersion ''.	Tencent.Ikvm	C:\Users\Tencent\.nuget\packages\ikvm\8.2.0\buildTransitive\netstandard2.0\IKVM.targets	46	
错误	IKVMSDK0012	The IkvmReference jar\bcprov-jdk15on-161.jar is missing AssemblyVersion.	Tenecnt.Api	C:\Users\Tencent\.nuget\packages\ikvm\8.5.0-develop0690\buildTransitive\netstandard2.0\IKVM.targets	28	

请问这个可能是什么原因?

支持(0) 反对(0) 笑叹、 | 园豆:34 (初学一级) | 2023-03-24 11:06

@笑叹、: 这个错误提示表明您的 ikvmc 编译器缺少一些依赖的 JAR 包。具体地说,提示了三个错误:

IKVMSDK0013: 缺少 bcpkix-jdk15on-161.jar 的 AssemblyFileVersion。

IKVMSDK0003: bcpkix-jdk15on-161.jar 的 AssemblyVersion 无效。

IKVMSDK0012: 缺少 bcpkix-jdk15on-161.jar 的 AssemblyVersion。

这些错误通常都是由于您的 JAR 包版本不兼容造成的。您可以尝试更新 bcpkix-jdk15on-161.jar 的版本,或者手动添加这些 JAR 包到您的项目中,然后重新生成解决方案。

支持(0) 反对(0) 火星包up | 园豆:202 (菜鸟二级) | 2023-03-24 11:10

@火星包up: 因为这个包是第三方提供的,我更新这个jar的版本不确定会不会对整体有影响,然后您说的手动添加指的是包含到项目中,还是发布时输出,还是?

支持(0) 反对(0) 笑叹、 | 园豆:34 (初学一级) | 2023-03-24 11:26

@笑叹、: 如果这个 Jar 包是第三方提供的,并且该 Jar 包版本不能更改或更新,那么您可以考虑手动添加该 Jar 包的引用并重新生成项目,以便在编译时将其包含到项目中。在 Visual Studio 中,您可以使用 NuGet 包管理器添加对该 Jar 包的引用,或者将 Jar 包添加到项目中,并将其设置为“复制到输出目录”。

具体来说,您可以按照以下步骤手动添加 Jar 包的引用:

在 Visual Studio 中,打开项目,并选择“解决方案资源管理器”中的项目。

右键单击“引用”,并选择“添加引用”。

在“添加引用”对话框中,选择“浏览”选项卡。

浏览到您的 Jar 包,并选择它。

单击“添加”按钮,将 Jar 包添加到项目中。

如果需要,在“属性”窗口中设置“复制到输出目录”属性为“始终复制”或“仅当较新”。

完成上述步骤后,重新生成项目并重新运行应用程序,检查问题是否已解决。

支持(0) 反对(0) 火星包up | 园豆:202 (菜鸟二级) | 2023-03-24 11:29

@火星包up: 已将jar包包含在项目中,并设置复制到输出目录,但添加引用时并不能引用jar的包,这个应该要如何处理

支持(0) 反对(0) 笑叹、 | 园豆:34 (初学一级) | 2023-03-24 11:49

@笑叹、: 在 .NET Core 中使用 IKVM 调用 Java 代码时,您需要先将 Java 代码编译成 Java 类或 JAR 文件,然后使用 IKVM 工具将其转换成 .NET 中可用的 DLL 或 EXE 文件。如果您已经将 Java 代码转换为了 .NET 程序集,并将其添加到了 .NET 项目中,但是在添加引用时无法找到该程序集,那么可能是因为该程序集不在项目的搜索路径中。

您可以通过以下方法来解决该问题:

在 Visual Studio 中打开项目,然后右键单击“依赖项”文件夹并选择“添加引用”选项。

在“添加引用”对话框中,单击“浏览”按钮,然后选择包含 Java 代码转换后的 .NET 程序集的文件。

将所选文件添加到项目中后,您需要在项目文件(.csproj 文件)中添加一个条目,以便将其复制到输出目录中。

支持(0) 反对(0) 火星包up | 园豆:202 (菜鸟二级) | 2023-03-24 11:51

@笑叹、: 在项目文件中添加以下代码:
<ItemGroup>
<None Update="path\to\your\assembly.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
其中,path\to\your\assembly.dll 是转换后的 .NET 程序集的文件路径。将此代码添加到项目文件中后,重新生成项目并尝试使用该程序集。

如果您仍然无法找到该程序集,您可以尝试手动将程序集复制到输出目录中,方法是:

在 Visual Studio 中打开项目。

找到包含 Java 代码转换后的 .NET 程序集的文件夹。

将该程序集复制到输出目录中,例如 bin/Debug/netcoreapp3.1 目录。

重新生成项目并尝试使用该程序集。

希望这些方法能够帮助您解决问题。

支持(0) 反对(0) 火星包up | 园豆:202 (菜鸟二级) | 2023-03-24 11:51

@火星包up: 这个是这样,目前的问题时我使用ikvm 8.2以上版本去转换jar包成dll包时转换不成功,所以无法进行后续的操作,这是我使用8.4.5用命令转换时抛出的错误

  ikvmc -target:library gson-2.8.5.jar 
at IKVM.Reflection.Universe.Load(String refname, Module requestingModule, Boolean throwOnError) in D:\a\ikvm\ikvm\src\IKVM.Reflection\Universe.cs:line 788
at IKVM.Internal.AssemblyResolver.Init(Universe universe, Boolean nostdlib, IList1 references, IList1 userLibPaths) in D:\a\ikvm\ikvm\src\ikvmc\IKVM\Internal\AssemblyResolver.cs:line 93
at ikvmc.IkvmcCompiler.Compile(String[] args) in D:\a\ikvm\ikvm\src\ikvmc\IkvmcCompiler.cs:line 178
at ikvmc.IkvmcCompiler.Main(String[] args) in D:\a\ikvm\ikvm\src\ikvmc\IkvmcCompiler.cs:line 112 
支持(0) 反对(0) 笑叹、 | 园豆:34 (初学一级) | 2023-03-24 12:01
0

这个错误提示说明你使用的 IKVM 缺少 bcpkix-jdk15on-161.jar 这个依赖包。这个包是 Bouncy Castle Provider 的一部分,提供了安全性功能的支持。可能的原因有:

  1. 你没有正确设置 IKVM 的依赖项:请确保你已经正确设置了 IKVM 的依赖项,并将 bcpkix-jdk15on-161.jar 添加到项目中。
  2. 依赖项版本不匹配:请确保你使用的 IKVM 版本与 bcpkix-jdk15on-161.jar 的版本匹配。如果版本不匹配,可能会导致依赖项无法加载或出现其他错误。
  3. 依赖项损坏或缺失:请检查 bcpkix-jdk15on-161.jar 文件是否存在并且正确。如果文件损坏或丢失,可能会导致依赖项无法加载或出现其他错误。
    你可以尝试重新下载和安装 IKVM,或者手动添加 bcpkix-jdk15on-161.jar 到项目中,并确保设置了正确的依赖项和版本。如果问题仍然存在,请检查 IKVM 的文档和社区支持,以获取更多帮助和支持。
LuoCore | 园豆:122 (初学一级) | 2023-03-31 08:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册