it-swarm.com.de

Clearscript-Dateien können auf dem Host nicht gefunden werden

Wie viele andere erhalte ich beim Bereitstellen meiner ASP.Net MVC-Anwendung die folgende Fehlermeldung:

V8-Schnittstellenbaugruppe kann nicht geladen werden; Vergewissern Sie sich, dass die folgenden Dateien mit Ihrer Anwendung installiert sind: ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll, v8-x64.dll

Clearscript wurde installiert, um weniger Dateien für Seitenanfragen zu konvertieren.

Ich habe meine Anwendung lokal in ISS Express und ISS ohne Probleme getestet. 

Wie hier vorgeschlagen http://clearscript3.rssing.com/chan-14849437/all_p12.html - Ich habe auch die fehlenden Codebibliotheken als Ressourcen zu meinem Projekt hinzugefügt.

ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll, v8-x64.dll sind alle in einem Ordner ClearScript.V8 im Ordner bin enthalten. Durch das Entfernen dieses Ordners wird das Problem nicht behoben.

An meinem Ende. Jede Hilfe wird geschätzt. 

18
Levon

Dies war Sekunden, um ein Projekt mit clearscript v8 zu starten, und ich erinnerte mich gut, was das Problem beim ersten Mal war. Native Lib v8 wird geladen.

Sie würden irgendwo in ERSTE SCHRITTE oder in einem ähnlichen Thema denken, die Entwickler von ClearScript sollten erwähnt haben, dass die native V8-Bibliothek in den Unterordnern 'ia32' oder 'x64' (Platform x86 oder Platform x64) vorhanden sein muss. Create über Unterordnern. und platzieren Sie dort native v8-libs (32bit in 'ia32', 64bit in 'x64').

Ich denke, sie haben vergessen, diesen Gedanken aufzuschreiben. Nur als Erinnerung ... Quellcode, der vom Loader genommen wurde und mir beim letzten Mal geholfen hat, das Problem zu verfolgen ... 

private static IntPtr LoadNativeLibrary()
{
    var suffix = Environment.Is64BitProcess ? "x64" : "ia32";
    var fileName = "v8-" + suffix + ".dll";
    var messageBuilder = new StringBuilder();

    var paths = GetDirPaths().Select(dirPath => Path.Combine(dirPath, deploymentDirName, fileName)).Distinct();
    foreach (var path in paths)
    {
        var hLibrary = NativeMethods.LoadLibraryW(path);
        if (hLibrary != IntPtr.Zero)
        {
            return hLibrary;
        }

        var exception = new Win32Exception();
        messageBuilder.AppendInvariant("\n{0}: {1}", path, MiscHelpers.EnsureNonBlank(exception.Message, "Unknown error"));
    }

    var message = MiscHelpers.FormatInvariant("Cannot load V8 interface Assembly. Load failure information for {0}:{1}", fileName, messageBuilder);
    throw new TypeLoadException(message);
}

Seltsamerweise hätte dieser Loader eine aussagekräftigere Nachricht in der Debug-Umgebung werfen sollen, tat es aber nicht. Stattdessen haben wir: FileNotFoundException mit der Meldung "Datei oder Assembly 'ClearScriptV8' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Das System kann die angegebene Datei nicht finden." . Vermutlich gibt es an anderer Stelle im Code einen anderen ähnlichen Loader, der LoadLibrary nicht verwendet, aber auf den .Net-Standard-Loader zurückgreift, was bedeutungslose Exceptions ergibt.

ich hoffe, das hilft anderen, ähnliche Probleme zu lösen.

1
SoLaR

die Ursache ist, dass asp.net sofort alle Bibliotheken im Verzeichnis/bin lädt. Ich habe die folgende Regel hinzugefügt, um Clearscript-Assemblys zu ignorieren, und es hat funktioniert

<configuration>
    <system.diagnostics>
        <trace autoflush="true" />
    </system.diagnostics>
    <system.web>
        <compilation>
            <assemblies>

                <remove Assembly="ClearScriptV8-64" />
                <remove Assembly="ClearScriptV8-32" />
               ....
            </assemblies>
        </compilation>

...

23
piotrbrzuska

Um klar zu sein, diese Ausnahme wird nicht immer durch einen fehlenden ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll oder v8-x64.dll verursacht. Oft besteht das Problem darin, dass eine DLL, auf die eine der oben genannten DLLs verweist, nicht gefunden werden kann. In den Fällen, in denen sich die entsprechenden DLLs auf dem Server befinden, löst die Installation der entsprechenden Visual C++ Redistributable normalerweise dieses Problem der vorübergehenden Abhängigkeit.

Laut dem Diskussionsforum des Projekts ClearScript unterstützt Visual Studio 2012 nicht mehr. Das bedeutet, dass die Version der Visual C++ Redistributable, die auf Ihrem Server installiert werden muss, von der Version von ClearScript abhängig ist, die Ihr Projekt verwendet:

15
ahsteele

Könnte ein bisschen spät sein, aber dies kann anderen helfen, zu diesem Beitrag zu kommen. 

Dies ist ein häufiger Fehler, wenn Sie die Visual C++ Redistributable für Visual Studio 2012 oder höher nicht auf dem Hosting-Server installiert haben

http://www.Microsoft.com/de-de/download/details.aspx?id=30679

9
no1spirite

Bei der Bereitstellung unter Windows Server 2012 mit der Rolle IIS sollten Sie zwei Schritte ausführen, um ClearScriptV8 auszuführen:

  1. Wie @ no1Sprite wies darauf hin:

sie müssen auf dem Hosting-Server die Visual C++ Redistributable für Visual Studio 2012 oder höher installieren: http://www.Microsoft.com/de-de/download/details.aspx?id=30679

  1. Stellen Sie sicher, dass Sie ClearScript.dll im Ordner bin\der Website und ClearScriptV8-64.dll und v8-x64.dll einfügen bin\ClearScript.V8.

Optional für 32-Bit-Anwendungen/Plattformen:

  1. Wenn Sie eine 32-Bit-Plattform verwenden, platzieren Sie ClearScriptV8-32.dll und v8-ia32.dll im Ordner bin\ClearScript.V8\der Website. Klicken Sie außerdem in IIS Manager mit der rechten Maustaste auf Anwendungspoolder Site und wählen Sie "Erweiterte Einstellungen ..." aus. Setzen Sie die Eigenschaft "32-Bit-Anwendungen aktivieren" auf true.
9
HRKoder

Keine der Antworten hat für mich funktioniert. Es ist eine Windows-Dienstanwendung.

Basierend auf akzeptierte Antwort ; Ich habe v8-ia32.dll & ClearScriptV8-32.dll = entfernt (da meine Anwendung auf x64 ) ausgerichtet ist

Es hat das Problem gelöst.

0
cilerler