Voici la raison pour laquelle cette question a été posée: www.devplusplus.com/Tests/CSharp/Hello_World.
Si des questions similaires ont été posées, le nombre de réponses en ligne ont plusieurs questions:
- Cela doit être fait ".Net 4.0" style", pas en mode legacy.
- L'assemblée est en mémoire et ne sera en mémoire, il ne peut pas être écrit dans le fichier système.
- Je voudrais limiter l'accès au système de fichiers, réseau, etc.
Quelque chose comme ceci:
var evidence = new Evidence();
evidence.AddHostEvidence(new Zone(SecurityZone.Internet));
var permissionSet = SecurityManager.GetStandardSandbox(evidence);
Jusqu'à présent, je ne peux pas trouver un moyen de créer un domaine d'application et de charger un assembly QUI n'EST PAS SUR LE SYSTÈME de FICHIERS, mais plutôt dans la RAM.
Encore une fois, les raisons pour lesquelles les autres solutions ne fonctionnent pas sont identifiées ci-dessus: 1. Beaucoup ont été pré-4.0, et 2. De nombreux invoqué le ".Charge" méthode de pointage pour le système de fichiers.
Réponse 2: j'ai une référence d'assembly parce qu'elle est générée par l' CSharpCodeProvider
classe, donc si vous connaissez un moyen de tourner que dans un tableau d'octets, ce serait parfait!
Exemple de Code pour Afficher La Faille de Sécurité
var provider = new CSharpCodeProvider(new Dictionary<String, String>
{ { "CompilerVersion", "v4.0" } });
var compilerparams = new CompilerParameters
{ GenerateExecutable = false, GenerateInMemory = true, };
var compilerResults = provider.CompileAssemblyFromSource(compilerparams,
string_Of_Code_From_A_User);
var instanceOfSomeClass = compilerResults.CompiledAssembly
.CreateInstance(className);
// The 'DoSomething' method can write to the file system and I don't like that!
instanceOfSomeClass.GetType().GetMethod("DoSomething")
.Invoke(instanceOfSomeClass, null);
Alors, pourquoi ne puis-je pas simplement enregistrer l'assemblage d'abord dans un fichier?
Pour deux raisons:
- Ce code est sur un serveur web partagé avec des autorisations limitées pour le système de fichiers lui-même.
- Ce code peut-être être exécuté potentiellement des milliers de fois, et je ne veux pas de 1 000 dll, même temporairement.