我有一个使用C#脚本接口的C#应用程序。这意味着我的应用程序将编译C#代码并运行它。
我使用System.CodeDom.Compiler类来完成此操作。
问题在于,如果运行下面的代码,则会抛出InvalidCastException,因为它正在尝试在我的动态代码中将字符串转换为int类型。
如果捕获异常,则无法确定错误发生在“动态代码”中的哪个位置。例如,“第8行的InvalidCastException”。
我可以获取堆栈跟踪,但没有行号。
您有什么想法吗?我想向我们的用户提供足够的信息,以了解他们的错误所在。
我使用System.CodeDom.Compiler类来完成此操作。
问题在于,如果运行下面的代码,则会抛出InvalidCastException,因为它正在尝试在我的动态代码中将字符串转换为int类型。
如果捕获异常,则无法确定错误发生在“动态代码”中的哪个位置。例如,“第8行的InvalidCastException”。
我可以获取堆栈跟踪,但没有行号。
您有什么想法吗?我想向我们的用户提供足够的信息,以了解他们的错误所在。
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);
}
}
/d:DEBUG
添加到CompilerOptions
中。 - ChrisWue