IKVM.MSBuild.Tools 8.4.5-prerelease0001
IKVM - Java Virtual Machine for .NET
What is IKVM?
IKVM is an implementation of Java for the Microsoft .NET platform. It can be used to quickly and easily:
- Execute compiled Java code (bytecode) on .NET Framework or .NET Core
- Convert bytecode to a .NET assembly to directly access its API in a .NET project
These tasks can be done without porting source code to .NET.
IKVM Components
- A Java virtual machine (JVM) implemented in .NET
- A .NET implementation of the Java class libraries
- A tool that translates Java bytecode (JAR files) to .NET IL (DLL or EXE files).
- Tools that enable Java and .NET interoperability
- A full JRE/JDK 8 runtime image.
Run Java Applications with .NET
- Statically: By compiling a Java application into a .NET assembly using <MavenReference>,<IkvmReference>orikvmc.- Libary assemblies can be referenced by any .NET application with a compatible target framework and platform. Types can be referenced by using the Java package name like a .NET namespace.
- Executable assemblies can be launched by specifying the class containing the main()method to execute at runtime when building usingikvmc.
 
- Dynamically: By running a Java application using the javaexecutable inside of the JDK Runtime Image. The Java bytecode is converted on-the-fly to CIL and executed. The experience should be identical to a normal JDK.
What IKVM is Not
- A converter utility to transform Java source code to C# source code
- A decompiler utitity to transform compiled Java bytecode to C# source code
- A tool that runs .NET code in Java - all IKVM conversions are Java > .NET
Support
- .NET Framework 4.6.1 and higher
- .NET Core 3.1 and higher
- .NET 5 and higher
- Java SE 8
- Windows x86/x64
- Linux x64
Documentation
See the tutorial to get started or IKVM.NET In Details for a more in-depth look.
Installation
NuGet
PM> Install-Package IKVM
Or, to use MavenReference:
PM> Install-Package IKVM.Maven.Sdk
Tools
The tools are available for download on the Releases page.
Runtime Images
Both a JRE and JDK runtime image are available. These images are standard JRE or JDK directory structures containing all of the standard tools: javac, jdeps, policytool, keytool, etc. Some Java libraries may require either a JRE or JDK, and if so, the IKVM.Image.JRE or IKVM.Image.JDK package should be added to your project.
PM> Install-Package IKVM.Image.JRE
PM> Install-Package IKVM.Image.JDK
A standalone JDK distributable is available for download on the Releases page. This directory structure should suffice as a JAVA_HOME path for standard Java applications.
Usage
IKVM supports integration with .NET SDK projects as well as low level tools for running compiled Java code directly or for advanced build scenarios. The 2 main entry points for integration with the .NET SDK are IkvmReference and MavenReference. .NET SDK projects can be built on the command line directly or using an IDE that supports them, such as recent versions Visual Studio or JetBrains Rider.
IkvmReference
IKVM includes build-time support for translating Java libraries to .NET assemblies. Install the IKVM package in a project that requires references to Java libraries. Use IkvmReference within an ItemGroup to indicate which Java libraries your project requires.
Example
<ItemGroup>
  <PackageReference Include="IKVM" Version="Version" />
</ItemGroup>
<ItemGroup>
  <IkvmReference Include="..\..\ext\helloworld-2.0.jar" />
</ItemGroup>
The output assembly will be generated as part of your project's build process and a reference will automatically be added to your project so you can call APIs of the compiled .jar assembly. Additional metadata can be added to IkvmReference to customize the assembly that is generated.
Syntax
<ItemGroup>
   <IkvmReference Include="..\..\ext\helloworld-2.0.jar">
      <AssemblyName>MyAssembly</AssemblyName>
      <AssemblyVersion>3.2.1.0</AssemblyVersion>
      <AssemblyFileVersion>3.0.0.0</AssemblyFileVersion>
      <DisableAutoAssemblyName>true</DisableAutoAssemblyName>
      <DisableAutoAssemblyVersion>true</DisableAutoAssemblyVersion>
      <FallbackAssemblyName>MyAssemblyFallback</FallbackAssemblyName>
      <FallbackAssemblyVersion>3.1.0.0</FallbackAssemblyVersion>
      <KeyFile>MyKey.snk</KeyFile>
      <DelaySign>true</DelaySign>
      <Compile>SomeInternalDependency.jar;SomeOtherInternalDependency.jar</Compile>
      <Sources>MyClass.java;YourClass.java</Sources>
      <References>SomeExternalDependency.jar;SomeOtherExternalDependency.jar</References>
      <Aliases>MyAssemblyAlias;helloworld2_0</Aliases>
      <Debug>true</Debug>
   </IkvmReference>
</ItemGroup>
Attributes and Elements
The following values can be used as either an attribute or a nested element of <IkvmReference>.
| Attribute or Element | Description | 
|---|---|
| Include(attribute only) | The identity of the IkvmReferenceitem. The value can be one of:
 | 
| AssemblyName | By default the AssemblyNameis generated using the rules defined by theAutomatic-Module-Namespecification. To override this, do so here. The value should not include a file extension,.dllwill be appended automatically. | 
| AssemblyVersion | By default the AssemblyVersionis generated using the rules defined by theAutomatic-Module-Namespecification. To override this, do so here. | 
| AssemblyFileVersion | By default the AssemblyFileVersionis generated using the rules defined by theAutomatic-Module-Namespecification or, if overridden, the same value asAssemblyVersion. To override this, do so here. | 
| DisableAutoAssemblyName | If truedisables detection ofAssemblyName. | 
| DisableAutoAssemblyVersion | If truedisables detection ofAssemblyVersion. | 
| FallbackAssemblyName | If AssemblyNameis not provided or cannot be calculated, use this value. | 
| FallbackAssemblyVersion | If AssemblyVersionis not provided or cannot be calculated, use this value. | 
| KeyFile | Specifies the filename containing the cryptographic key. When this option is used, the compiler inserts the public key from the specified file into the assembly manifest and then signs the final assembly with the private key. | 
| DelaySign | This option causes the compiler to reserve space in the output file so that a digital signature can be added later. Use DelaySignif you only want to place the public key in the assembly. TheDelaySignoption has no effect unless used withKeyFile. | 
| Compile | A semi-colon separated list of Java class path items to compile into the assembly. By default this value is the Identityof the item, if the identity of the item is an existing JAR file or directory (not yet supported). MSBuild globs are supported to reference multiple JAR or .class files. | 
| Sources | A semi-colon separated list of Java source files to use during documentation generation. (not yet supported) | 
| References | Optional semi-colon separated list of other IkvmReferenceidentity values to specify as a reference to the current one. For example, iffoo.jardepends onbar.jar, include both asIkvmReferenceitems, but specify the identity ofbar.jaron theReferencesmetadata offoo.jar. | 
| Debug | Optional boolean indicating whether to generate debug symbols. By default this is determined based on the <DebugType>and<DebugSymbols>properties of the project. Only full debug symbols are currently supported. | 
| Aliases | A semi-colon separated list of aliases that can be used to reference the assembly in References. | 
| All other metadata supported on the ReferenceMSBuild item group definition. | 
IkvmReference is not transitive. Including it in one project and adding a dependency to that project from a second
project will not result in the same reference being available on the second project. Instead, add the reference to
each project.
For each project to resolve to the same resulting assembly ensure their settings are identical.
Multiple IkvmReference entries can be configured to include each other as references.
<ItemGroup>
   <IkvmReference Include="helloworld.jar">
      <AssemblyVersion>1.0.0.0</AssemblyVersion>
   </IkvmReference>
   <IkvmReference Include="helloworld-2.jar">
      <AssemblyName>helloworld-2</AssemblyName>
      <AssemblyVersion>2.0.0.0</AssemblyVersion>
      <References>helloworld.jar</References>
      <Aliases>helloworld2</Aliases>
   </IkvmReference>
</ItemGroup>
Automatic-Module-Name Specification
The Automatic-Module-Name is either a specified attribute of the JAR manifest, which can be found in the META-INF/MANIFEST.MF file inside the JAR, or a generated value based on the name of the JAR file. See the documentation for more information.
MavenReference
See the ikvm-maven Readme for usage instructions.
Showing the top 20 packages that depend on IKVM.MSBuild.Tools.
| Packages | Downloads | 
|---|---|
| IKVM.MSBuild IKVM MSBuild Targets | 81 | 
| IKVM.MSBuild IKVM MSBuild Targets | 80 | 
| IKVM.MSBuild IKVM MSBuild Targets | 79 | 
| IKVM.MSBuild IKVM MSBuild Targets | 74 | 
| IKVM.MSBuild IKVM MSBuild Targets | 73 | 
| IKVM.MSBuild IKVM MSBuild Targets | 72 | 
| IKVM.MSBuild IKVM MSBuild Targets | 71 | 
| IKVM.MSBuild IKVM MSBuild Targets | 70 | 
| IKVM.MSBuild IKVM MSBuild Targets | 69 | 
.NET Framework 4.6.1
- IKVM.MSBuild.Tools.runtime.linux-arm64 (>= 8.4.5-prerelease0001)
- IKVM.MSBuild.Tools.runtime.linux-arm (>= 8.4.5-prerelease0001)
- IKVM.MSBuild.Tools.runtime.linux-x64 (>= 8.4.5-prerelease0001)
- IKVM.MSBuild.Tools.runtime.win7-x64 (>= 8.4.5-prerelease0001)
.NET Core 3.1
- IKVM.MSBuild.Tools.runtime.linux-arm64 (>= 8.4.5-prerelease0001)
- IKVM.MSBuild.Tools.runtime.linux-arm (>= 8.4.5-prerelease0001)
- IKVM.MSBuild.Tools.runtime.linux-x64 (>= 8.4.5-prerelease0001)
- IKVM.MSBuild.Tools.runtime.win7-x64 (>= 8.4.5-prerelease0001)
| Version | Downloads | Last updated | 
|---|---|---|
| 8.14.0 | 3 | 10/06/2025 | 
| 8.14.0-tags-8-14-0-pre-1.1 | 3 | 10/02/2025 | 
| 8.13.4 | 3 | 09/28/2025 | 
| 8.13.3 | 6 | 09/23/2025 | 
| 8.13.2 | 6 | 09/11/2025 | 
| 8.13.1 | 13 | 08/08/2025 | 
| 8.13.0 | 13 | 08/06/2025 | 
| 8.12.0 | 15 | 06/29/2025 | 
| 8.11.2 | 29 | 03/11/2025 | 
| 8.11.1 | 25 | 02/21/2025 | 
| 8.11.0 | 30 | 02/08/2025 | 
| 8.11.0-pre.4 | 27 | 02/05/2025 | 
| 8.11.0-pre.2 | 32 | 12/30/2024 | 
| 8.11.0-pre.1 | 28 | 12/17/2024 | 
| 8.10.3 | 30 | 11/08/2024 | 
| 8.10.2 | 39 | 09/27/2024 | 
| 8.10.1 | 39 | 08/21/2024 | 
| 8.10.0 | 36 | 08/19/2024 | 
| 8.10.0-pre.1 | 36 | 08/19/2024 | 
| 8.9.1 | 44 | 07/15/2024 | 
| 8.9.0 | 41 | 07/15/2024 | 
| 8.9.0-pre.3 | 46 | 07/15/2024 | 
| 8.9.0-pre.1 | 34 | 07/08/2024 | 
| 8.8.1 | 43 | 06/06/2024 | 
| 8.8.0 | 52 | 04/24/2024 | 
| 8.8.0-pre.1 | 40 | 03/31/2024 | 
| 8.7.6 | 51 | 04/24/2024 | 
| 8.7.5 | 54 | 01/30/2024 | 
| 8.7.4 | 48 | 01/23/2024 | 
| 8.7.3 | 41 | 12/20/2023 | 
| 8.7.2 | 54 | 12/20/2023 | 
| 8.7.1 | 52 | 11/04/2023 | 
| 8.7.0 | 46 | 11/04/2023 | 
| 8.7.0-pre.3 | 46 | 11/04/2023 | 
| 8.7.0-pre.2 | 53 | 10/28/2023 | 
| 8.7.0-pre.1 | 50 | 10/22/2023 | 
| 8.6.4 | 51 | 09/12/2023 | 
| 8.6.3-tags-8-6-3-pre-24.1 | 52 | 08/29/2023 | 
| 8.6.3-tags-8-6-3-pre-11.1 | 54 | 08/30/2023 | 
| 8.6.2 | 55 | 07/15/2023 | 
| 8.6.1 | 42 | 08/19/2023 | 
| 8.6.0 | 52 | 08/05/2023 | 
| 8.5.2 | 54 | 08/17/2023 | 
| 8.5.1 | 48 | 08/17/2023 | 
| 8.5.0 | 51 | 08/07/2023 | 
| 8.5.0-prerelease0001 | 48 | 08/07/2023 | 
| 8.5.0-develop2513 | 58 | 08/08/2023 | 
| 8.5.0-develop1599 | 45 | 08/08/2023 | 
| 8.5.0-develop0690 | 55 | 08/05/2023 | 
| 8.4.5 | 48 | 08/11/2023 | 
| 8.4.5-prerelease0001 | 53 | 07/15/2023 | 
| 8.4.4 | 62 | 07/15/2023 | 
| 8.4.4-prerelease0001 | 51 | 07/15/2023 | 
| 8.4.3 | 52 | 07/15/2023 | 
| 8.4.2 | 55 | 08/17/2023 | 
| 8.4.1 | 57 | 08/11/2023 | 
| 8.4.0 | 48 | 08/17/2023 | 
| 8.4.0-prerelease0001 | 52 | 07/15/2023 |