Dll aus anderem Speicherort laden, c#



  • Hallo zusammen,
    ich möchte ein Programm "veröffentlichen" aber dort wo die Program.exe gestartet wird soll nur die .exe liegen und nicht alle dlls aus dem \bin Ordner. Könnt ihr mir helfen?
    Was ich schon versucht habe in der app.config das einzufügen:

     <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="C:\Program Files (x86)\Dll;C:\Program Files\Dll" />
          </assemblyBinding>
        </runtime>
    

    starten kann ich die Anwendung leider nicht.

    Edit:
    Erstelle ich einen Ordner im Ausführungsverzeichnis und kopiere alle dlls da rein dann läufts 🧐



  • Eine vermutlich nicht sehr elegante aber funktionierende Variante ist einfach die PATH Environment-Variable zu ändern. Natürlich nur für den eigenen Prozess. Siehe https://docs.microsoft.com/en-us/dotnet/api/system.environment.setenvironmentvariable?view=netframework-4.8

    Oder, wenn du willst dass die DLLs gar nicht als Files irgendwo rumliegen müssen, dann google mal nach .net embedded assemblies. Wobei es da Fallstricke gibt, mit manchen Third-Party Assemblies geht das nur begrenzt. Für eigene Assemblies verwende ich das allerdings erfolgreich und bisher ohne Probleme. Und zwar die Variante über den AppDomain.AssemblyResolve Event. Ein Hinweis dazu allerdings: wenn das .NET Framework die Assembly selbst findet, wird AppDomain.AssemblyResolve nicht aufgerufen. D.h. wenn man eine "falsche" Assembly neben die .exe legt (z.B. alte, verbuggte Version), dann wird eben die alte verbuggte Assembly geladen.


Log in to reply