FaberSanZ / SPIRV-Cross.NET

SPIRV-Cross.NET is a practical tool and library for performing reflection on SPIR-V and disassembling SPIR-V back to high level languages.
MIT License
16 stars 4 forks source link

Unable to load native library #1

Open tgjones opened 3 years ago

tgjones commented 3 years ago

This is awesome - thank you so much for creating this library!

As far as I can tell, it's not loading the native library correctly though. When I run SPIRVCross.Test, I get this exception:

Unhandled exception. System.TypeInitializationException: The type initializer for 'SPIRVCross.SPIRV' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'spirv-cross-c-shared.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)
   at System.Runtime.InteropServices.NativeLibrary.LoadFromPath(String libraryName, Boolean throwOnError)
   at System.Runtime.InteropServices.NativeLibrary.Load(String libraryPath)
   at SPIRVCross.LibraryLoader.LoadLocalLibrary(String libraryName) in C:\Users\Tim Jones\Downloads\SPIRV-Cross.NET-main\Src\SPIRVCross\SPIRV.cs:line 57
   at SPIRVCross.SPIRV.LoadNativeLibrary() in C:\Users\Tim Jones\Downloads\SPIRV-Cross.NET-main\Src\SPIRVCross\SPIRV.cs:line 17
   at SPIRVCross.SPIRV..cctor() in C:\Users\Tim Jones\Downloads\SPIRV-Cross.NET-main\Src\SPIRVCross\Generate\Commands.cs:line 17
   --- End of inner exception stack trace ---
   at SPIRVCross.SPIRV.spvc_context_create(spvc_context* context) in C:\Users\Tim Jones\Downloads\SPIRV-Cross.NET-main\Src\SPIRVCross\Generate\Commands.cs:line 96
   at SPIRVCross.Test.Program.Main(String[] args) in C:\Users\Tim Jones\Downloads\SPIRV-Cross.NET-main\Src\SPIRVCross.Test\Program.cs:line 62

I think this is because SPIRVCross.csproj needs to include some extra stuff to copy the native dlls to the output folder. For example, Vortice.Dxc includes a .targets file in the csproj:

https://github.com/amerkoleci/Vortice.Windows/blob/7481411e43659c6e4d25c52b705a7eadcee2cfc2/src/Vortice.Dxc/Vortice.Dxc.csproj#L28-L31

And that .targets file looks like this:

https://github.com/amerkoleci/Vortice.Windows/blob/7481411e43659c6e4d25c52b705a7eadcee2cfc2/src/Vortice.Dxc/build/netstandard2.0/Vortice.Dxc.targets#L6-L12

... unless I'm missing something, and it's working for you without doing that?

FaberSanZ commented 3 years ago

Hi ,Sorry for the long delay. Somehow totally missed this. I will try to fix this, but for some reason it works for me

FaberSanZ commented 3 years ago

The reason it doesn't work is that I only target .NET 5

FaberSanZ commented 3 years ago

I just added support for netstandard2.0, can you try now?