2016-10-11 5 views
0

J'essaie de compiler du code au moment de l'exécution qui est référencé par un objet qui est également compilé lors de l'exécution dans C# .NET 4.6.Assemblage compilé au moment de l'exécution de la référence dans un autre ensemble compilé à l'exécution

J'utilise CSharpCodeProvider pour générer un CompilerResult en mémoire. L'assembly résultant est référencé dans le deuxième fragment de code qui est compilé. Est-il possible d'ajouter le AssemblyReference aux CompilerParameters avant de compiler le 2ème morceau (sinon j'obtiendrais une erreur de compilateur d'assembly manquant).

Actuellement, je vois deux options:

  1. Créez le 1er assemblage sur le disque et l'utilisation CompilerParameters.ReferencedAssemblies.Add (mais je n'aime pas les opérations de disque inutiles)
  2. Ne pas générer de la 1ère pièce à mais tout coller le code dans la 2ème pièce (mais je n'aime pas coller le même code plusieurs fois)

ma question: y at-il une référence à une exécution générée assemblage façon en mémoire dans un autre temps d'exécution généré Assemblée?

+0

Peut-être pertinent: http://stackoverflow.com/questions/2830160/c-sharp-referencing-a-type-in-a-dynamically-generated-assembly – YSharp

Répondre

1

CSharpCodeProvider fonctionne sur un disque de toute façon - même lorsque vous générez seul l'ensemble « en mémoire », il compile l'ensemble sur le disque et la charge de la mémoire (il doit, en quelque sorte - tout ce qu'il fait est appel csc.exe). La seule différence est que le fichier d'assembly est une DLL temporaire quelque part, plutôt qu'un fichier que vous avez spécifié.

Si vous voulez une véritable compilation en mémoire du code C#, utilisez le compilateur Roslyn.

+0

Accepté comme réponse, bon indice avec la création de DLL sur le disque, ça explique beaucoup. Aussi bon conseil avec le compilateur Roslyn. – anhoppe