<p><strong>Remarque</strong> : Assembly.CodeBase est déprécié dans .NET Core/.NET 5+ : <a href="https://learn.microsoft.com/en-us/dotnet/api/system.reflection.assembly.codebase?view=net-5.0">https://learn.microsoft.com/en-us/dotnet/api/system.reflection.assembly.codebase?view=net-5.0</a></p>
<p><strong>Réponse originale :</strong></p>
<p>J’ai défini la propriété suivante car nous l’utilisons souvent dans les tests unitaires.</p>
<pre><code class="lang-auto">public static string AssemblyDirectory
{
get
{
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string path = Uri.UnescapeDataString(uri.Path);
return Path.GetDirectoryName(path);
}
}
</code></pre>
<p>La propriété <code>Assembly.Location</code> donne parfois des résultats amusants lorsqu’on utilise NUnit (où les assemblages s’exécutent depuis un dossier temporaire), je préfère donc utiliser <code>CodeBase</code> qui vous donne le chemin au format URI, puis <code>UriBuild.UnescapeDataString</code> retire le <code>File://</code> au début, et <code>GetDirectoryName</code> le convertit au format Windows normal.</p>