On native Windows, I see errors:

error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\ucrtbase.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\System.IO.Compression.Native.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\msquic.dll' could not be opened 
-- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\mscorrc.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\mscordbi.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\mscordaccore_amd64_amd64_6.0.522.21309.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\mscordaccore.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\Microsoft.DiaSymReader.Native.amd64.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\hostpolicy.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\dbgshim.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\coreclr.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\clrjit.dll' could not be opened 
-- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\clretwrc.dll' could not be 
opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-utility-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-time-l1-1-0.dll' 
could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-string-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-stdio-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-runtime-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-process-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-private-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-multibyte-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-math-l1-1-0.dll' 
could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-locale-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-heap-l1-1-0.dll' 
could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-filesystem-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-environment-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-convert-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-crt-conio-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-util-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-timezone-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-sysinfo-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-synch-l1-2-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-synch-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-string-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-rtlsupport-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-profile-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-processthreads-l1-1-1.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-processthreads-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-processenvironment-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-namedpipe-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-memory-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-localization-l1-2-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-libraryloader-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-interlocked-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-heap-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-handle-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-file-l2-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-file-l1-2-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-file-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-fibers-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-errorhandling-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-debug-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-datetime-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-console-l1-2-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.
error CS0009: Metadata file 'C:\Program 
Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\api-ms-win-core-console-l1-1-0.dll'
 could not be opened -- PE image doesn't contain managed metadata.

This patch should fix it.


2024-10-09  Bruno Haible  <br...@clisp.org>

        csharpcomp: Avoid error on Windows.
        Reported by Michele Locati <mich...@locati.it>.
        * build-aux/csharpcomp.sh.in: Don't produce -reference options for DLLs
        whose name starts with a lowercase letter or contains '.Native.'.
        * lib/csharpcomp.c (name_is_dll): Filter our file names that start with
        a lowercase letter or contain '.Native.'.

diff --git a/build-aux/csharpcomp.sh.in b/build-aux/csharpcomp.sh.in
index 85ea5aaf22..fcfc32cd7f 100644
--- a/build-aux/csharpcomp.sh.in
+++ b/build-aux/csharpcomp.sh.in
@@ -180,8 +180,11 @@ else
         ;;
     esac
     options_csc="$options_csc -lib:"`echo "$arg" | sed -e "$sed_quote_subst"`
-    for file in `cd "$dotnet_runtime_dir" && echo *.dll`; do
-      options_csc="$options_csc -reference:"`echo "$file" | sed -e 
"$sed_quote_subst"`
+    for file in `cd "$dotnet_runtime_dir" && echo 
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*.dll`; do
+      case "$file" in
+        *.Native.*) ;;
+        *) options_csc="$options_csc -reference:"`echo "$file" | sed -e 
"$sed_quote_subst"` ;;
+      esac
     done
     csc="$dotnet_sdk_dir/Roslyn/bincore/csc.dll"
     case "@build_os@" in
diff --git a/lib/csharpcomp.c b/lib/csharpcomp.c
index 4caed49533..4874061e60 100644
--- a/lib/csharpcomp.c
+++ b/lib/csharpcomp.c
@@ -68,7 +68,12 @@ name_is_dll (const struct dirent *d)
     {
       size_t d_name_len = strlen (d->d_name);
       if (d_name_len > 4 && memcmp (d->d_name + d_name_len - 4, ".dll", 4) == 
0)
-        return 1;
+        /* Filter out files that start with a lowercase letter and files that
+           contain the substring ".Native.", since on Windows these files
+           produce an error "PE image doesn't contain managed metadata".  */
+        if (d->d_name[0] >= 'A' && d->d_name[0] <= 'Z'
+            && strstr (d->d_name, ".Native.") == NULL)
+          return 1;
     }
   return 0;
 }




Reply via email to