Adding References To .NET Libraries in Java

Adding References to .NET Libraries Stored on Disk or in GAC

Javonet allows you to use any .NET library. As with any regular .NET application, you need to reference the libraries you are planning to use. You can reference any custom DLL file on your computer or registered in GAC, as well as any library from the .NET Framework.

To add a reference, call the Javonet.addReference(“dll path or name”) method.


public static void main(String[] args) throws JavonetException {
     Javonet.activate("YOUR NAME", "", "YOUR-LICENSE-KEY", JavonetFramework.v40);


In the addReference argument, you can provide the local DLL file name, the full path or the name of the library registered in GAC. If you plan to reference more than one library, you can pass all of them as arguments, or call addReference several times.

Note: By default javOnet references mscorlib from the .NET framework.

Adding references to .NET libraries from memory stream

If you are planning to embed all your .NET code in single JAR file either for simplifying deployment procedures, hiding the unnecessery complexity from the user or because your project is Java applet, you can use the possibility of adding references to .NET libraries using memory stream.

To add reference using memory stream call the Javonet.addReference(“dll name”, dll_byte_array); method. Javonet still requires to provide the DLL name for caching and listing purposes. The name can be either full name with “.dll” extension or just the DLL name or easy to understand alias. The second argument is the DLL byte array. You need to load your .NET DLL from embeded resource in your JAR file, from disk or other location into the byte array and pass that array as argument to this method.

If your DLL has dependency reference to other DLL you should load all the dependencies and target library using addReference before starting any operations on the types stored in those libraries. Javonet will automatically resolve the dependant types from DLLs provided.

You can pass both byte[] or boxed Byte[] however Byte[] is preferred. In case of passing unboxed byte[] array Javonet will perform the boxing internally before passing the array to .NET.

See the example below how you can add reference to .NET library using byte array.

     Path path = Paths.get("Javonet.ValueTypesSample.dll");
     byte[] data = Files.readAllBytes(path);

To completely hide the .NET DLLs from end-user you can embed them in your JAR file and load using InputStreams. Example below shows how to convert JAR file embedded resource into byte array and pass to addReference method:

	public static void main(String[] args) throws JavonetException, IOException {
		Javonet.activate("", "your-javonet-license-key", JavonetFramework.v45);

	private static void AddEmbeddedDllReference(String fileName) throws IOException, JavonetException{
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		InputStream input = classLoader.getResourceAsStream(fileName);
		byte[] dllBytes = IOUtils.toByteArray(input);
Adding references to .NET libraries through an XML configuration file

There are many benefits to setting up javOnet using an XML configuration file. It simplifies distribution of your application to your team, lets you update the javOnet references more quickly, and avoids hardcoded referenced DLLs details.

Before the first usage Javonet looks for XML configuration file and loads defined references. Using XML references you can still add additional libraries in Java code using standard approach.

More about using XML configuration file you will find in Activating Javonet section.

Sample javOnet XML configuration file with DLLs references

<?xml version="1.0" encoding="ISO-8859-1" ?>
    <username>YOUR NAME</username>