Frage Die .NET-Programmdatei lädt keine referenzierten Assemblys, wenn sie von \\ localhost \ xyz gestartet wird


Meine .NET-Programmdatei abc.exe verweist auf mehrere Assemblies. Einer von ihnen heißt xyz.core.exe. Ich habe Schwierigkeiten, es zum Laufen zu bringen, wenn es von einem Netzwerkort gestartet wird, der durch einen Freigabenamen mit einem Pfad wie spezifiziert wird \\localhost\xyz\abc.exe. Dies funktioniert einwandfrei, wenn ich einen Netzwerklaufwerkbuchstaben mit dem Namen mounte Z: auf \\localhost\xyz und wenn ich starte Z:\abc.exe.

.NET scheint beim Versuch, das zu laden, verwirrt zu werden xyz.core.exe Montage von der Aktie. Es wirft ein System.IO.FileNotFoundException Ausnahme mit folgenden Informationen zum Fusionsprotokoll:

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  \\localhost\xyz\abc.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Workstation\arnaud
LOG: DisplayName = xyz.core, Version=2.5.2.1001, Culture=neutral, PublicKeyToken=...
(Fully-specified)
LOG: Appbase = file://localhost/xyz/
LOG: Initial PrivatePath = NULL
Calling assembly : abc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from     C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: xyz.core, Version=2.5.2.1001, Culture=neutral, PublicKeyToken=...
LOG: Attempting download of new URL file://localhost/xyz/xyz.core.DLL.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core/xyz.core.DLL.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core.EXE.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core/xyz.core.EXE.

Wenn ich dies mit Process Monitor aus einem anderen Blickwinkel betrachte, sehe ich einige Zugriffsversuche auf mein lokales Laufwerk mit den folgenden Pfaden:

C:\xyz\xyz.core.dll
C:\xyz\xyz.core\xyz.core.dll
C:\xyz\xyz.core.exe
C:\xyz\xyz.core\xyz.core.exe

als ob der Loader die Absicht des Ladens von einer Netzwerkfreigabe falsch verstanden hätte und die \\localhost benutzen C: stattdessen. Das Problem scheint nicht mit den Sicherheitseinstellungen zu tun zu haben (ich habe mich nie mit CASPOL auf meinem Rechner herumgeschlagen) und ich benutze .NET 3.5 SP1, das den Start ausführbarer Dateien von einer Freigabe erlaubt.

Und die Tatsache, dass das Programm über den entsprechenden Netzwerklaufwerk-Laufwerksbuchstaben gestartet wird, sollte bestätigen, dass dies kein Sicherheitsproblem ist.

Das Problem hängt nicht mit der Tatsache zusammen, dass der Verweis auf einer EXE-Assembly ist, da es die gleiche Art von Ladefehlern mit Verweisen auf einfache DLL-Assemblys erzeugt.

Irgendwelche Ideen, was die Ursache für dieses Ladeproblem sein könnte? Ist sonst jemand in eine solche Situation geraten?


6
2018-01-29 06:35


Ursprung


Antworten:


Ich kann die "C: \ xyz \ xyz.core.dll" nicht erklären (außer als Kuriosität), aber der Rest ist genau das, was ich erwarten würde.

Dies scheint alles in Codezugriffssicherheit gebunden zu sein. Bis vor Kurzem mussten Sie "caspol" verwenden, um CAS so zu konfigurieren, dass Sie das tun können ausführen die exe von jeder Art von Netzwerkfreigabe. Dies wurde geändert (entweder .NET 3.5 oder .NET 3.5 SP1) kartiert Aktien ("f:" usw.) machen Holen Sie die Ausführungsberechtigung, aber UNC-Freigaben nicht.

Sie kann Verwenden Sie "caspol", um Zugang zum UNC zu gewähren (so was), aber IMO ist es eine viel bessere Option, zu ClickOnce-Bereitstellung zu wechseln. Das kann immer noch über eine Netzwerkfreigabe sein, aber es enthält zusätzliche Veröffentlichungsinformationen, mit denen die Laufzeitumgebung bereitgestellt werden kann. ich glauben Es kann auch verwendet werden, um so zu arbeiten, dass es offline arbeitet (wenn das Netzwerk nicht verfügbar ist), aber automatisch von der Freigabe aktualisiert wird, wenn es möglich ist. Ich weiß, dass dies für http-Bereitstellung funktioniert - I glauben es funktioniert für Netzwerk). Die IDE präsentiert dies unter dem Deckmantel "veröffentlichen", und es sind etwa 5 Klicks erledigt.


2
2018-02-03 21:39



Ich bin verwirrt - wenn Sie localhost verwenden, sollte es auf die lokale Festplatte gehen.

Versuchen Sie, den Localhost anderswo zu verweisen? Wenn dies der Fall ist, kann dies Probleme verursachen - versuchen Sie einen anderen Namen zu verwenden


0
2018-02-01 21:10