根据错误提示,IKVM 缺少 bcpkix-jdk15on-161.jar 文件,这可能是因为该文件不存在或未在正确的位置中。你需要确保该文件存在于指定的文件夹中。
你可以尝试以下方法解决该问题:
确保 bcpkix-jdk15on-161.jar 存在于正确的文件夹中。可以检查一下引用的路径是否正确,或者手动将文件复制到正确的文件夹中。
如果你是使用 Maven 或 Gradle 进行依赖管理,可以尝试清除本地仓库并重新构建项目,以确保所有依赖项都正确下载。
如果你使用的是 Visual Studio,可以尝试在项目的属性页中检查引用的路径是否正确,并尝试手动添加缺失的依赖项。
最后,你可以考虑更新 IKVM 版本,以便获得更稳定和兼容性更好的版本。
这个使用的是最新版的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, IList
1 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
@笑叹、: 这个错误提示表明系统无法找到名为 netstandard 的程序集。这可能是因为您的环境中没有安装 .NET Core 的 SDK,或者是某些文件损坏或缺失所导致的。
为了解决这个问题,您可以尝试以下步骤:
确保您的系统中已经安装了 .NET Core SDK。您可以在 Microsoft 官网上下载和安装最新版本的 .NET Core SDK。
如果您已经安装了 .NET Core SDK,尝试重新安装它以修复任何可能的文件损坏或缺失。
如果您仍然遇到问题,请尝试重新安装 IKVM,确保您使用的是最新版本的 IKVM,并且所有依赖项都已正确安装。
最后,您也可以尝试使用 Visual Studio 进行构建,因为它可能会自动处理依赖项和构建路径等问题。
如果以上步骤仍然无法解决问题,请提供更多的错误信息,以便我更好地理解问题的性质和根本原因
@火星包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
请问这个可能是什么原因?
@笑叹、: 这个错误提示表明您的 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 包到您的项目中,然后重新生成解决方案。
@火星包up: 因为这个包是第三方提供的,我更新这个jar的版本不确定会不会对整体有影响,然后您说的手动添加指的是包含到项目中,还是发布时输出,还是?
@笑叹、: 如果这个 Jar 包是第三方提供的,并且该 Jar 包版本不能更改或更新,那么您可以考虑手动添加该 Jar 包的引用并重新生成项目,以便在编译时将其包含到项目中。在 Visual Studio 中,您可以使用 NuGet 包管理器添加对该 Jar 包的引用,或者将 Jar 包添加到项目中,并将其设置为“复制到输出目录”。
具体来说,您可以按照以下步骤手动添加 Jar 包的引用:
在 Visual Studio 中,打开项目,并选择“解决方案资源管理器”中的项目。
右键单击“引用”,并选择“添加引用”。
在“添加引用”对话框中,选择“浏览”选项卡。
浏览到您的 Jar 包,并选择它。
单击“添加”按钮,将 Jar 包添加到项目中。
如果需要,在“属性”窗口中设置“复制到输出目录”属性为“始终复制”或“仅当较新”。
完成上述步骤后,重新生成项目并重新运行应用程序,检查问题是否已解决。
@火星包up: 已将jar包包含在项目中,并设置复制到输出目录,但添加引用时并不能引用jar的包,这个应该要如何处理
@笑叹、: 在 .NET Core 中使用 IKVM 调用 Java 代码时,您需要先将 Java 代码编译成 Java 类或 JAR 文件,然后使用 IKVM 工具将其转换成 .NET 中可用的 DLL 或 EXE 文件。如果您已经将 Java 代码转换为了 .NET 程序集,并将其添加到了 .NET 项目中,但是在添加引用时无法找到该程序集,那么可能是因为该程序集不在项目的搜索路径中。
您可以通过以下方法来解决该问题:
在 Visual Studio 中打开项目,然后右键单击“依赖项”文件夹并选择“添加引用”选项。
在“添加引用”对话框中,单击“浏览”按钮,然后选择包含 Java 代码转换后的 .NET 程序集的文件。
将所选文件添加到项目中后,您需要在项目文件(.csproj 文件)中添加一个条目,以便将其复制到输出目录中。
@笑叹、: 在项目文件中添加以下代码:
<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 目录。
重新生成项目并尝试使用该程序集。
希望这些方法能够帮助您解决问题。
@火星包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
这个错误提示说明你使用的 IKVM 缺少 bcpkix-jdk15on-161.jar
这个依赖包。这个包是 Bouncy Castle Provider 的一部分,提供了安全性功能的支持。可能的原因有:
bcpkix-jdk15on-161.jar
添加到项目中。bcpkix-jdk15on-161.jar
的版本匹配。如果版本不匹配,可能会导致依赖项无法加载或出现其他错误。bcpkix-jdk15on-161.jar
文件是否存在并且正确。如果文件损坏或丢失,可能会导致依赖项无法加载或出现其他错误。bcpkix-jdk15on-161.jar
到项目中,并确保设置了正确的依赖项和版本。如果问题仍然存在,请检查 IKVM 的文档和社区支持,以获取更多帮助和支持。