Mono C #: Mkbundle'd "Hello World" Script Exécute avec seulement le code de sortie "11" sur un serveur Web

StackOverflow https://stackoverflow.com//questions/24014152

  •  21-12-2019
  •  | 
  •  

Question

J'aimerais exécuter le code Mono (C #) sur un serveur Web qui n'a pas d'exécution mono installé. Depuis que Mkbundle est capable de produire un code natif, je suis d'abord essayé d'obtenir un script uni "Hello World" pour travailler des deux côtés, qui fonctionne localement mais pas sur le serveur Web.

c # helloworld.cs script:

 using System;

 public class HelloWorld
 {
    public static void Main()
    {
       System.Console.WriteLine("Hello, World!");
    }
 }

Je compose et je fais un regroupement en utilisant: $ GMCS helloworld.cs -out: helloworld.exe
$ mkbundle -o helloworld helloworld.exe --Static --deps

Mon seul moyen autorisé d'exécuter ce script sur le serveur Web consiste à utiliser un script PHP, qui suit:

 $cmd = "./helloworld";
 exec($cmd, $array, $return_code);
 var_dump($array);
 //passthru($cmd, $return_code);
 var_dump($return_code);

localement, ce script fonctionne et je reçois la réponse suivante:

tableau (1) { [0]=> String (13) "Bonjour, Monde!" } int (0)

Mais sur le serveur Web, tout ce que le script retourne

tableau (0) {} int (11)

code de sortie Bash 11 est non standard selon Ce et Ce Codelistes de sortie.

Les deux machines sont sur un linux 64 bits et un "fichier helloworld" renvoie ce qui suit ...
Sur la machine locale:

helloworld: exécutable LSB ELF 64 bits, X86-64, version 1 (SYSV), liée de manière dynamique (utilise des libs partagés), pour GNU / Linux 2.6.24, bâtiment [SHA1]= FBC9731FB13202C604B025BA3EFE51C69DC40D8, non dépouillé

sur Web Server:

helloworld: ELF 64 bits LSB exécutable, X86-64, version 1 (SYSV), liée de manière dynamique (utilise des libs partagés), dépouillé

pourrait "lié dynamiquement (utilise des libs partagés), dépouillé" signifie toujours que certaines bibliothèques intégrées ou mono-runtime sont toujours manquantes?

Était-ce utile?

La solution

J'ai créé une machine virtuelle avec le même système d'exploitation que le serveur Web, lors de l'exécution du paquet que j'ai eu la défaillance de la segmentation (noyau largué) ', qui a le code de sortie "11".Mkbundle n'est pas un moyen totalement compatible de déployer des logiciels mono écrits sur des machines Linux.

Donc, à la fin, j'ai installé mono sur la machine virtuelle, compilé et mkbundle'd le code et après avoir téléchargé le fichier sur le serveur Web, il a été capable de l'exécuter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top