Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire da .NET 10, se si specifica DllImportSearchPath.AssemblyDirectory come unico flag di ricerca, il runtime cerca esclusivamente nella directory dell'assembly. Questa modifica influisce sul comportamento di P/Invokes e della NativeLibrary classe .
Versione introdotta
.NET 10
Comportamento precedente
In precedenza, quando DllImportSearchPath.AssemblyDirectory è stato specificato come unico flag di ricerca, il runtime ha cercato prima la directory dell'assembly. Se la libreria non è stata trovata, si è ricorso al comportamento predefinito di ricerca delle librerie del sistema operativo.
Ad esempio, con il codice seguente, il runtime cercherà nella directory dell'assembly e quindi ricorrerà ai percorsi di ricerca del sistema operativo.
[DllImport("example.dll", DllImportSearchPath = DllImportSearchPath.AssemblyDirectory)]
public static extern void ExampleMethod();
Nuovo comportamento
A partire da .NET 10, quando DllImportSearchPath.AssemblyDirectory viene specificato come unico flag di ricerca, il runtime esegue la ricerca solo nella directory dell'assembly. Non ricorre al comportamento predefinito di ricerca della libreria del sistema operativo.
L'esempio di codice precedente ora cerca solo nella directory di assembly example.dll. Se la libreria non viene trovata, viene generata un'eccezione DllNotFoundException.
Tipo di cambiamento che interrompe la compatibilità
Si tratta di una modifica comportamentale .
Motivo della modifica
Il comportamento di fallback quando si specificava DllImportSearchPath.AssemblyDirectory causava confusione ed era incoerente con la progettazione dei flag di ricerca. Questa modifica garantisce chiarezza e coerenza nel comportamento.
Azione consigliata
Se è necessario un comportamento di fallback, evitare di specificare un oggetto esplicito DllImportSearchPath. Per impostazione predefinita, quando non vengono specificati flag, il runtime cerca nella directory dell'assembly e quindi utilizza il comportamento di ricerca predefinito delle librerie del sistema operativo.
Esempio:
[DllImport("example.dll")]
public static extern void ExampleMethod();
Le API interessate
- P/Invoke con DefaultDllImportSearchPathsAttribute
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad