From ad8ab7b7bda5703a42fe8c224230a9d8726a04ef Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Mon, 7 Nov 2022 07:50:20 -0800 Subject: [PATCH 1/2] Force the tool to be win-x64 only --- .../ClangSharpPInvokeGenerator/ClangSharpPInvokeGenerator.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/sources/ClangSharpPInvokeGenerator/ClangSharpPInvokeGenerator.csproj b/sources/ClangSharpPInvokeGenerator/ClangSharpPInvokeGenerator.csproj index 33d53764..12f0bdde 100644 --- a/sources/ClangSharpPInvokeGenerator/ClangSharpPInvokeGenerator.csproj +++ b/sources/ClangSharpPInvokeGenerator/ClangSharpPInvokeGenerator.csproj @@ -4,6 +4,7 @@ Exe true + win-x64 net6.0;net7.0 From f93ceba8ca371e0147551c11ab7b587ae82ce170 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Mon, 7 Nov 2022 08:00:12 -0800 Subject: [PATCH 2/2] Add a small error message in the case of failure to resolve libClang and libClangSharp --- .../Extensions/clang.ResolveLibrary.cs | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/sources/ClangSharp.Interop/Extensions/clang.ResolveLibrary.cs b/sources/ClangSharp.Interop/Extensions/clang.ResolveLibrary.cs index 10726b9b..98a03d72 100644 --- a/sources/ClangSharp.Interop/Extensions/clang.ResolveLibrary.cs +++ b/sources/ClangSharp.Interop/Extensions/clang.ResolveLibrary.cs @@ -18,13 +18,17 @@ static @clang() private static IntPtr OnDllImport(string libraryName, Assembly assembly, DllImportSearchPath? searchPath) { - return TryResolveLibrary(libraryName, assembly, searchPath, out var nativeLibrary) - ? nativeLibrary - : libraryName.Equals("libclang") && TryResolveClang(assembly, searchPath, out nativeLibrary) - ? nativeLibrary - : libraryName.Equals("libClangSharp") && TryResolveClangSharp(assembly, searchPath, out nativeLibrary) - ? nativeLibrary - : IntPtr.Zero; + var result = TryResolveLibrary(libraryName, assembly, searchPath, out var nativeLibrary) ? nativeLibrary + : libraryName.Equals("libclang") && TryResolveClang(assembly, searchPath, out nativeLibrary) ? nativeLibrary + : libraryName.Equals("libClangSharp") && TryResolveClangSharp(assembly, searchPath, out nativeLibrary) ? nativeLibrary + : IntPtr.Zero; + + if (result == IntPtr.Zero) + { + Console.WriteLine("Failed to resolve libClang or libClangSharp."); + Console.WriteLine("If you are running as a dotnet tool, you may need to manually copy the appropriate DLLs from NuGet due to limitations in the dotnet tool support."); + } + return result; } private static bool TryResolveClang(Assembly assembly, DllImportSearchPath? searchPath, out IntPtr nativeLibrary) @@ -47,7 +51,14 @@ private static bool TryResolveLibrary(string libraryName, Assembly assembly, Dll foreach (DllImportResolver resolver in resolvers.Cast()) { - nativeLibrary = resolver(libraryName, assembly, searchPath); + try + { + nativeLibrary = resolver(libraryName, assembly, searchPath); + } + catch + { + nativeLibrary = IntPtr.Zero; + } if (nativeLibrary != IntPtr.Zero) {