开发者

How to get error info from dynamic C# code compiling

开发者 https://www.devze.com 2023-03-01 16:22 出处:网络
I have a C# application which uses a C# script interface. That means that my application will compile C# code and run it.

I have a C# application which uses a C# script interface. That means that my application will compile C# code and run it.

I am using the System.CodeDom.Compiler class to do it with.

The problem is that if I run the code below it throws an InvalidCastException because it is trying to cast a string to an int in my dynamic code.

I开发者_JS百科f I catch the exception I have no indication where in the 'dynamic code' that error occured. For instance 'InvalidCastException on line 8'.

I get a stack trace, but no line numbers.

Any ideas? I want to present to our users enough information to know where their error is.

public class NotDynamicClass
{
    public object GetValue()
    {
        return "value";
    }
}

class Program
{
    public static void Main()
    {
        var provider = CSharpCodeProvider.CreateProvider("c#");
        var options = new CompilerParameters();
        options.ReferencedAssemblies.Add("DynamicCodingTest.exe");
        var results = provider.CompileAssemblyFromSource(options, new[] 
        { 
@"
using DynamicCodingTest;

public class DynamicClass
{
    public static void Main()
    {
        NotDynamicClass @class = new NotDynamicClass();
        int value = (int)@class.GetValue();

    }
}"
        });

        var t = results.CompiledAssembly.GetType("DynamicClass");
        t.GetMethod("Main").Invoke(null, null);
    }
}


You need to set IncludDebugInformation to true on your CompilerParameters.

Update: At the bottom of the MSDN documentation there is a community remark:

For C#, if you set this property to true you need to also set GenerateInMemory to false and set the value of OutputAssembly to a valid file name. This will generate an assembly and a .pdb file on disk and give you file and line number information in any stacktraces thrown from your compiled code.

0

精彩评论

暂无评论...
验证码 换一张
取 消