Fix DllImport library names for case-sensitive filesystems (#26415)
On case-sensitive filesystems (Windows with WSL, developer mode, or
per-directory case sensitivity), DllImport fails to load native
libraries due to relying on .NET's automatic platform-specific
extension/prefix addition, which can produce incorrect casing.
## Changes
- **NativeMethods.shared.cs**: Changed desktop platform library names
from `"onnxruntime"` to `"onnxruntime.dll"` and `"ortextensions"` to
`"ortextensions.dll"`
- Explicitly specifying extensions ensures consistent behavior across
case-sensitive and case-insensitive filesystems
- Android/iOS platform-specific names unchanged
## Impact
**Windows**: No changes required - libraries already named
`onnxruntime.dll`
**Linux/macOS**: Native packaging may need updates to provide
`onnxruntime.dll` in runtime folders (either as actual filename or
symlink to `libonnxruntime.so`/`libonnxruntime.dylib`)
```csharp
// Before (relied on automatic extension addition)
internal const string DllName = "onnxruntime";
// After (explicit extension for consistency)
internal const string DllName = "onnxruntime.dll";
```
Fixes #23509
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Does not work on case-sensitive filesystems</issue_title>
> <issue_description>### Describe the issue
>
> Library does not work on case-sensitive filesystems. We get:
>
> ```
> Unhandled exception. System.TypeInitializationException: The type
initializer for 'Microsoft.ML.OnnxRuntime.NativeMethods' threw an
exception.
> ---> System.EntryPointNotFoundException: Unable to find an entry point
named 'OrtGetApiBase' in DLL 'onnxruntime'.
> at Microsoft.ML.OnnxRuntime.NativeMethods.OrtGetApiBase()
> at Microsoft.ML.OnnxRuntime.NativeMethods..cctor()
> --- End of inner exception stack trace ---
> at Microsoft.ML.OnnxRuntime.SessionOptions..ctor()
> at Microsoft.ML.OnnxRuntime.InferenceSession..ctor(String modelPath)
> at Program.<Main>$(String[] args) in Z:\temp\onnxtest\Program.cs:line
1
> ```
>
> Probably due to a mistyped filename somewhere.
>
> ### To reproduce
>
> Create new C# project, use this Program.cs:
>
> ```
> new Microsoft.ML.OnnxRuntime.InferenceSession("");
> ```
>
>
> ### Urgency
>
> _No response_
>
> ### Platform
>
> Windows
>
> ### OS Version
>
> Microsoft Windows [Version 10.0.19045.6332]
>
> ### ONNX Runtime Installation
>
> Released Package
>
> ### ONNX Runtime Version or Commit ID
>
> 1.22.1
>
> ### ONNX Runtime API
>
> Other / Unknown
>
> ### Architecture
>
> X64
>
> ### Execution Provider
>
> Other / Unknown
>
> ### Execution Provider Library Version
>
> _No response_</issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> <comment_new><author>@snnn</author><body>
> I checked the code, still do not have much clue. We didn't specify the
extension name. Maybe it was added by the .net runtime.
>
>
https://github.com/microsoft/onnxruntime/blob/main/csharp/src/Microsoft.ML.OnnxRuntime/NativeMethods.shared.cs#L831</body></comment_new>
> <comment_new><author>@snnn</author><body>
> > Maybe we should just specify explicit extensions then in DllImport
>
> That might be the easiest fix. Would like to submit a
PR?</body></comment_new>
> <comment_new><author>@snnn</author><body>
> Don't close it.</body></comment_new>
> </comments>
>
</details>
- Fixes microsoft/onnxruntime#26129
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: snnn <856316+snnn@users.noreply.github.com>
Co-authored-by: Changming Sun <chasun@microsoft.com>