Mon application possède une fonctionnalité de script dans laquelle je compile un assembly en mémoire à partir du script de l'utilisateur à l'aide de CodeDomProvider.CompileAssemblyFromSource. C'est similaire à ce qui est décrit dans this answer.Aucun numéro de ligne sur les exceptions de l'assembly généré par CompileAssemblyFromSource
Cela fonctionne très bien, mais toutes les exceptions qui sont levées à partir du code de script n'ont pas de numéros de ligne dans la trace de la pile. J'ai essayé de définir le paramètre compilerParameters.IncludeDebugInformation = true, mais il n'inclut toujours pas les numéros de ligne.
Est-il possible d'obtenir des numéros de ligne sur des exceptions d'un ensemble en mémoire?
Voici les éléments clés de code que je utilise pour compiler l'ensemble:
CompilerParameters compilerParameters =
compilerInfo.CreateDefaultCompilerParameters();
compilerParameters.GenerateInMemory = true;
compilerParameters.GenerateExecutable = false;
compilerParameters.IncludeDebugInformation = true;
...
CodeDomProvider codeProvider = compilerInfo.CreateProvider();
CompilerResults compilerResults =
codeProvider.CompileAssemblyFromSource(
compilerParameters,
new string[] { sourceCode });
Je suppose que c'est un compromis entre les tracas de la gestion et du nettoyage des fichiers temporaires avec l'avantage de l'information de débogage. –
@Don: Exactement. Nous avons essayé de le faire sans fichiers temporaires, mais nous avons essayé à la volée. Cependant, le nettoyage ne fonctionnait pas pour nous en fonction du moment où les fichiers ont été publiés, alors que nous créons les fichiers dans le répertoire temporaire de l'utilisateur, nous l'avons laissé principalement à l'utilisateur pour le nettoyer. –
Oui, c'est ce que nous avons fait aussi. – ShuggyCoUk