Il s'agit de la commande mono-shlib-cop qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
mono-shlib-cop - Vérificateur d'utilisation de la bibliothèque partagée
SYNOPSIS
mono-shlib-flic [OPTIONS]* [NOM-FICHIER-ASSEMBLAGE]*
OPTIONS
-p, --prefixes=PRÉFIXE
Préfixes d'installation mono. C'est pour trouver $prefix/etc/mono/config. Le défaut
est basé sur l'emplacement de mscorlib.dll et est normalement correct.
DESCRIPTION
mono-shlib-flic est un outil qui inspecte un assemblage géré à la recherche d'erreurs ou
utilisation suspecte des bibliothèques partagées.
L'outil prend un ou plusieurs noms de fichiers d'assemblage et inspecte chaque assemblage spécifié.
Les erreurs vérifiées incluent :
* La bibliothèque partagée existe-t-elle ?
* Le symbole demandé existe-t-il dans la bibliothèque partagée ?
Les avertissements vérifiés incluent :
* La bibliothèque partagée cible est-elle une bibliothèque versionnée ? (Ne concerne que les systèmes Unix,
pas Mac OS X ou Windows.)
En général, seules les bibliothèques versionnées telles que libc.so.6 sont présents sur la machine de l'utilisateur,
et les efforts pour charger libc.so se traduira par un System.DllNotFoundException. Il y a trois
des solutions à cela :
1. Exiger que l'utilisateur installe -développer packages qui fournissent le non versionné
une bibliothèque. Cela nécessite généralement que l'utilisateur installe un grand nombre de
packages, ce qui complique le processus d'installation.
2. Utilisez un nom entièrement versionné dans votre DllImporter déclarations. Cela nécessite une édition
votre code source et recompiler chaque fois que vous devez cibler une version différente de
la bibliothèque partagée.
3. Fournir un assemblage.config fichier qui contient éléments pour remapper le
nom de la bibliothèque partagée utilisé par votre assembly à la bibliothèque partagée versionnée réelle
présent sur le système des utilisateurs. Mono fournit un certain nombre de pré-existants
entrées, y compris celles pour libc.so ainsi que libX11.so.
EXEMPLE
Le code suivant contient des exemples des erreurs et avertissements ci-dessus :
en utilisant System.Runtime.InteropServices ; // pour DllImport
Démo classe {
[DllImport ("mauvais nom de bibliothèque")]
privé statique externe void BadLibraryName ();
[DllImport ("libc.so")]
privé statique externe void BadSymbolName ();
[DllImport ("libcap.so")]
privé statique externe int cap_clear (IntPtr cap_p);
}
Nom de bibliothèque incorrect
En supposant que la bibliothèque nom-mauvaise-bibliothèque n'existe pas sur votre machine,
Demo.BadLibraryName générera une erreur, car elle nécessite une bibliothèque partagée qui
ne peut pas être chargé. Cela peut être ignorable ; voir BOGUES
Nom de symbole incorrect
Démo.BadSymbolName générera une erreur, car libc.so (remappé à libc.so.6 by
mono $préfixe/etc/mono/config file) ne contient pas la fonction Nom de symbole incorrect
Dépendance de bibliothèque non versionnée
En supposant que vous ayez le fichier libcap.so , Démo.cap_clear générera un avertissement
car, tandis que libcap.so pourrait être chargé, libcap.so peut ne pas exister sur les utilisateurs
machine (sur FC2, /lib/libcap.so est fournie par libcap-développement , et vous ne pouvez pas supposer
que les utilisateurs finaux auront tout -développer paquets installés).
FIXATION CODE
Le correctif dépend de l'avertissement ou de l'erreur :
Mauvais noms de bibliothèque
Utilisez un nom de bibliothèque valide dans le DllImporter attribut, ou fournir un entrée
pour mapper votre nom de bibliothèque existant à un nom de bibliothèque valide.
Mauvais noms de symboles
Référencez un symbole qui existe réellement dans la bibliothèque cible.
Dépendance de bibliothèque non versionnée
Fournir un pour référencer une bibliothèque correctement versionnée, ou ignorer le
avertissement (voir BOGUES ).
DLLMAP INSCRIPTIONS
Mono cherche un ASSEMBLÉE-NOM informations cartographiques. Par exemple, avec mcs.exe , Mono
lirait mcs.exe.config , Et pour Mono.Posix.dll , Mono lirait Mono.Posix.dll.config
Notre .config fichier est un document XML contenant un partie avec
imbriqué entrées, qui contient dll ainsi que l'objectif les attributs. L'attribut dll
doit contenir la même chaîne que celle utilisée dans votre DllImporter valeur de l'attribut et la cible
l'attribut spécifie quelle bibliothèque partagée mono doit actually charge au moment de l'exécution.
Un exemple de fichier .config est :
Utilisez mono-shlib-cop en ligne en utilisant les services onworks.net