2010-06-23 21 views
13

Ich versuche, eine .NET 4.0. DLL zum GAC hinzuzufügen. Ich versuche dies zu tun, weil es von einem Drittanbieter sowohl als 32-Bit- als auch als 64-Bit-DLL veröffentlicht wird, die ich aus verschiedenen Apps auf verschiedenen Plattformen in beiden Formaten verwenden muss.Problem beim Registrieren von ChilkatDotNet4.dll im GAC

Auf jeden Fall habe ich Probleme beim Registrieren dieser DLL auf dem GAC in einer Windows Server 2008-Umgebung.

Ich habe versucht, gacutil.exe (und unterstützende Datei) zu kopieren unter "C: \ Programme (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools" auf meinem lokalen Computer zu dem " C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 "auf dem Zielproduktionsserver gemäß den Vorschlägen here.

Ich versuchte dann, sie in "C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319" zu kopieren.

Die Ausführung von beiden Standorten zeigte eine erfolgreiche Installation an. Und in der Tat scheint die Registrierung erfolgreich:

  • C: \ Windows \ Microsoft.NET \ assembly \ GAC_64 \ ChilkatDotNet4 \ v4.0_9.0.8.0__eb5fc1fc52ef09bd \ ChilkatDotNet4.dll
  • C: \ Windows \ Microsoft. NET \ assembly \ GAC_32 \ ChilkatDotNet4 \ v4.0_9.0.8.0__eb5fc1fc52ef09bd \ ChilkatDotNet4.dll

Allerdings läuft eine Konsole-Anwendung, die mit der Meldung an den (64bit) Version der DLL-Fehler heraus bezieht:

System.IO.FileNotFoundException: Konnte Datei oder Assembly "ChilkatDotNet4.dll" oder eine seiner Abhängigkeiten nicht laden. Das angegebene Modul konnte nicht gefunden werden. Dateiname:. ‚ChilkatDotNet4.dll‘

So habe ich jetzt manuell folgende GAC Einträge erstellt mkdir verwenden und kopieren Sie von einer Eingabeaufforderung (die nicht wirklich funktionieren kann oder ich habe keine Ahnung, was so ist besondere gacutil.exe):

  • C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ ChilkatDotNet4 \ v4.0_9.0.8.0__eb5fc1fc52ef09bd \ ChilkatDotNet4.dll (die 64-Bit-Version der dLL)
  • C: \ Windows \ Assembly \ GAC_64 \ ChilkatDotNet4 \ v4.0_9.0.8.0__eb5fc1fc52ef09bd \ ChilkatDotNet4.dll
  • C: \ Windows \ assembly \ GAC_32 \ ChilkatDotNet4 \ v4.0_9.0.8.0__eb5fc1fc52ef09bd \ ChilkatDotNet4.dll

Nach jedem "install" des DLL, die ich getestet und erhielt die gleichen Fehler. Irgendwelche Ideen willkommen!


EDIT: die GAC Ausgabe oben kann eigentlich nicht die Ursache sein. Selbst wenn ich ein brandneues Console-App-Projekt erstelle und die .dll-Datei direkt hinzufüge (so dass sie im Bin liegt), kann ich sie immer noch nicht auf dem Server ausführen. Außerdem habe ich festgestellt, dass Konsolen-Apps auf das .NET 4.0-Clientprofil und nicht auf .NET Framework 4 ausgerichtet sind. Wenn ich versuche, das Targeting auf das Clientprofil auszuführen, scheint keine der System.Web * -Bibliotheken verfügbar zu sein . Allerdings habe ich versucht, eine sehr einfache Test-App für beide Targeting ausgeführt und keiner würde auf dem Server beim Verweis auf die schlechte .dll ausgeführt werden.

Gibt es eine spezielle Art von Installation, die ausgeführt werden sollte, um .NET 4.0 Console-Apps auszuführen?

+1

+1 Vielen Dank !!! –

Antwort

34

Für jeden, der in Zukunft Probleme damit haben könnte. Es war kein generalisiertes Problem mit der Art, wie ich die DLL beim GAC registrieren ließ oder wie ich mich auf meine Projekte bezog.

ChilkatDotNet4.dll (und die anderen Versionen bin ich sicher) wurde in Visual C++ erstellt. Auf dem Server, auf dem es bereitgestellt wird, muss Visual C++ Runtime für die entsprechende Prozessorarchitektur installiert sein.

Für das Jahr 2010 (.NET 4.0):

Wenn Sie eine x86-Anwendung auf einer 64-Bit-Plattform laufen. Stellen Sie sicher, dass Sie den Anwendungspool mit "32-Bit-Anwendungen aktivieren" = true markieren.

+2

Vielen Dank dafür - sparte meinen Speck heute :) – fritterfatboy

+2

Danke für die Antwort. Ich benutzte chillkatDotNet4.dll 64bit auf Windows 2008 R2 x64 wie Frangiskos. Ich installierte Visual C++ Laufzeiten x64 zuerst. Ich überprüfte die Website, sah aber den gleichen Fehler erneut. Ich änderte die X64-DLL von Chilkat mit x86 und installierte auch x86-Version von Visual C++ - Laufzeiten. Und legen Sie die Anwendungspools "32-Bit-Anwendungen aktivieren" Eigenschaft auf True fest. Dann hat alles perfekt funktioniert. – CemilF

+1

Mein Fall war sehr ähnlich mit euch: Ich benutzte x86 Chilkat lib, veröffentlicht zu jeder CPU. Meine Server waren x64, aber die Installation von C++ x86 und die Aktivierung von "32-Bit-Anwendungen aktivieren" haben den Trick vollbracht! –