web-dev-qa-db-fra.com

Les fichiers Clearscript sont introuvables sur l'hôte

Comme beaucoup d'autres, je reçois le message d'erreur suivant lors du déploiement de mon application ASP.Net MVC:

Impossible de charger l'assemblage d'interface V8; vérifiez que les fichiers suivants sont installés avec votre application: ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll, v8-x64.dll

Clearscript a été installé dans le cadre d'un effort visant à transformer moins de fichiers à la volée en requêtes de page.

J'ai testé mon application localement dans ISS Express et ISS sans accroc. 

Comme suggéré ici http://clearscript3.rssing.com/chan-14849437/all_p12.html J'ai également inclus les bibliothèques de code manquantes en tant que ressources pour mon projet.

ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll, v8-x64.dll sont tous inclus dans un dossier ClearScript.V8 dans le dossier bin. La suppression de ce dossier ne résout pas le problème.

À ma fin d'esprit. Toute aide est appréciée. 

18
Levon

C’était déjà le temps de commencer un projet avec clearscript v8, et c’est bon, je me suis rappelé quelle était la question pour la première fois. Chargement de Native Lib v8.

Vous pourriez penser que quelque part dans GETTING STARTED ou un sujet similaire, les développeurs de ClearScript auraient dû indiquer que vous devez disposer de la bibliothèque native V8 située dans les sous-dossiers 'ia32' ou 'x64' (Platform x86 ou Platform x64, respectivement). Créer au-dessus des sous-dossiers. et placez-y les bibliothèques v8 natives (32 bits dans 'ia32', 64 bits dans 'x64').

Je suppose qu’ils ont oublié d’écrire cette pensée. À titre de rappel ... Le code source extrait du chargeur qui m’a aidé la dernière fois à suivre le problème ... 

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);
}

Curieusement, ce chargeur aurait dû envoyer un message plus significatif dans un environnement de débogage, mais ce n’est pas le cas. Au lieu de cela, nous avons: FileNotFoundException avec le message "Impossible de charger le fichier ou l'assembly 'ClearScriptV8' ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié." . Je suppose que le code ailleurs est un autre chargeur similaire qui n'utilise pas LoadLibrary mais retombe sur le chargeur .Net par défaut, donnant une exception sans signification.

espérons que cela aide les autres à résoudre des problèmes similaires.

1
SoLaR

la cause en est que asp.net charge instantanément toutes les bibliothèques du répertoire/bin. J'ai ajouté la règle suivante pour ignorer les assemblys Clearscript, et cela a fonctionné.

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

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

...

23
piotrbrzuska

Pour être clair, cette exception n'est pas toujours causée par un ClearScriptV8-32.dll, ClearScriptV8-64.dll, v8-ia32.dll ou v8-x64.dll manquant. Souvent, le problème est qu’un dll référencé par l’un des dll susmentionnés ne peut pas être trouvé. Dans les cas où les dll appropriées se trouvent sur le serveur, l'installation du correctif Visual C++ approprié résout généralement ce problème de dépendance transitive.

Selon le forum de discussion du projet ClearScript ne prend plus en charge Visual Studio 2012 . Cela signifie que la version de Visual C++ Redistributable qui doit être installée sur votre serveur dépend de la version de ClearScript utilisée par votre projet:

15
ahsteele

Peut-être un peu tard, mais cela peut aider les autres à venir à ce poste. 

Il s'agit d'une erreur courante lorsque Visual C++ Redistributable for Visual Studio 2012 ou version ultérieure n'est pas installé sur le serveur d'hébergement.

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

9
no1spirite

Si vous déployez sur Windows Server 2012 avec le rôle IIS, vous devez procéder de deux manières pour que ClearScriptV8 s'exécute:

  1. Comme @ no1Sprite a souligné:

vous devez installer sur le serveur d'hébergement Visual C++ Redistributable pour Visual Studio 2012 ou une version ultérieure: http://www.Microsoft.com/en-gb/download/details.aspx?id=30679

  1. Assurez-vous de placer ClearScript.dll dans le dossier bin \ du site Web et ClearScriptV8-64.dll et v8-x64.dll into bin\ClearScript.V8 .

Facultatif, pour les applications/plates-formes 32 bits:

  1. Si vous utilisez une plate-forme 32 bits, placez le dossier ClearScriptV8-32.dll et v8-ia32.dll dans le site Web du site bin\ClearScript.V8 \. ____.] En outre, dans IIS Manager, cliquez avec le bouton droit de la souris sur le Pool d'applications du site et sélectionnez "Paramètres avancés ..." . Définissez la propriété " Activez les applications 32 bits " sur true .
9
HRKoder

Aucune des réponses n'a fonctionné pour moi. C'est une application de service Windows.

Basé sur réponse acceptée ; J'ai supprimé v8-ia32.dll & ClearScriptV8-32.dll (puisque mon application cible x64 )

Cela a résolu le problème.

0
cilerler