C#/VS Dlls in Unterordner einbringen?
Derzeitig benutzt mein C# Programm viele DLLs und ich würde sie gern in ein Unterordner namens "Dll" verschieben so dass sie nicht mehr in dem Main Ordner rumsitzen da es nicht sehr übersichtlich ist. Ist das möglich?
Also ./name.dll -> ./dll/name.dll
2 Antworten
Neben dem, was regex9 geschrieben hat:
Es gibt noch andere Stellen, wo man einstellen kann, wo das Programm nach dem Kompilieren seine Assemblies suchen soll, die findest Du in der app.config im assemblyBinding: probing und codeBase
Beide habe ich noch nicht genutzt, ich weiß nur, dass es sie gibt.
Alternativ kannst Du auch zur Laufzeit selber laden oder einen EventHandler für AssemblyResolve definieren und dann darüber laden.
Für .NET Core/5 gibt's meine ich keine vergleichbare Alternative.
Ich persönlich würde das aber einfach lassen. Wozu muss der Ordner übersichtlich sein?
Außerdem wird seit .NET Core noch größer, weil viele .NET-Assemblies als NuGet-Paket verteilt werden und dann einfach als DLL neben der Exe landen - zumindest standardmäßig.
Biete einfach ein kleines Installations-Tool an, was den Ordner irgendwo hin legt und einen Link im Startmenü einrichtet, das wirkt auch gleich viel besser.
Ja, das kannst du machen. Im Solution Explorer hast du unter deinem Projektknoten auch ein Element References, unter dem alle Referenzen (bzw. Assemblies) aufgeführt werden. Du kannst aufgelistete Assemblies entfernen und via Rechtsklick auf References > Add Reference neu verlinken. Im sich öffnenden Dialog gibt es auch einen Reiter, um eigene Dateien einzubinden.
Andernfalls kannst du die csproj-Datei auch direkt mit einem Texteditor öffnen und die Reference-Knoten anpassen.
<Reference Include="SomeAssembly">
<ReferencePath>relative/path/to/SomeAssembly.dll</ReferencePath>
<HintPath>relative/path/to/SomeAssembly.dll</HintPath>
<!-- ... -->
</Reference>
Entweder, du definierst einen ReferencePath oder einen HintPath. Ersterer hat Vorrang in der Suchreihenfolge des Builders.