C#/VS Dlls in Unterordner einbringen?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler

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.