google / or-tools

Google's Operations Research tools:
https://developers.google.com/optimization/
Apache License 2.0
11.24k stars 2.13k forks source link

DllNotFoundException: Unable to load DLL 'google-ortools-native': The specified module could not be found. (Exception from HRESULT: 0x8007007E #4366

Open shaileshgande opened 1 month ago

shaileshgande commented 1 month ago

What version of OR-Tools and what language are you using? Version: 9.10.4067 Language: C#

Which solver are you using (e.g. CP-SAT, Routing Solver, GLOP, BOP, Gurobi) GLOP

What operating system (Linux, Windows, ...) and version? Windows 11

What did you do? Steps to reproduce the behavior:

  1. Create a console .NetFramework project targeting 4.6.2 version
  2. Install Google.Ortools via the Nuget package manager
  3. Use the "Solver.CreateSolver("GLOP")" line to get the solver object.
  4. Runtime exception is thrown:

System.TypeInitializationException: 'The type initializer for 'Google.OrTools.LinearSolver.operations_research_linear_solverPINVOKE' threw an exception Inner exception 1: TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. Inner Exception 2: DllNotFoundException: Unable to load DLL 'google-ortools-native': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

What did you expect to see Able to the solver object

What did you see instead? runtime exeception

Note: Nuget pacakage manager shows that the ortools package has dependency with .net framework 4.6.2. So, ideally it should work with .net 4.6.2 and above image

Mizux commented 1 month ago

IIRC net4.6.2 framewrok don't know how to parse project.csproj native library stuff so you need to load it manually...

related to:

note: Pet project to test combinatory: https://github.com/Mizux/dotnet-native/actions/runs/10811556739

Mizux commented 1 month ago

Can you target .Net CORE instead ? i.e. net6.0 (LTS) or net8.0 (LTS) instead ?

ref: https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core https://dotnet.microsoft.com/en-us/platform/support/policy

shaileshgande commented 1 month ago

Thanks! @Mizux for the response! Loading the dll 'google-ortools-native.dll' manually helped to resolve the exceptions in .net framework. However, additionally the prefer-32 bit checkbox had to be unchecked for me to resolve the 'BadImageFormat' exception. (https://github.com/google/or-tools/issues/1185)

Quick question: Is there any other way than loading the dll manually to able to work with a .Net Framework application? note: I cannot target .net core or .net 6.0 or above.

Mizux commented 1 month ago

very long time ago we also shipped a runtime.json, maybe for .Net Framework user this one is mandatory to locate the runtime file ? https://github.com/google/or-tools/blob/v6.10/ortools/dotnet/Google.OrTools/runtime.json.in

Will try to do some test in Mizux/dotnet-native project ASAP...