我正在编写一个生成C#代码的工具,并编写相应的单元测试。
其中一个测试是运行该工具并编译结果,以便我可以使用反射来检查程序集。但是,我在进行这项操作时遇到了问题。我的当前代码如下:
我是否正确添加这些引用,或者说我做错了什么?
其中一个测试是运行该工具并编译结果,以便我可以使用反射来检查程序集。但是,我在进行这项操作时遇到了问题。我的当前代码如下:
var args = new Dictionary<string, string> { { "CompilerVersion", "v4.0" } };
var compiler = new CSharpCodeProvider();
var parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
parameters.ReferencedAssemblies.Add("System.Data.dll");
parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
parameters.ReferencedAssemblies.Add("System.Xml.dll");
parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll");
var results = compiler.CompileAssemblyFromFile(new CompilerParameters(), Directory.GetFiles("Model\\Editable").Concat(Directory.GetFiles("Model\\NotEditable")).ToArray());
if (results.Errors.Count > 0) {
StringBuilder sb = new StringBuilder();
foreach (CompilerError err in results.Errors) {
sb.AppendLine(err.FileName + "(" + err.Line + ":" + err.Column + "): " + err.ErrorText);
}
throw new Exception(sb.ToString());
}
异常通常不是测试的一部分,只是让我查看输出了什么错误。可悲的是,我遇到的错误大致如下:
c:\<redacted>\bin\Debug\Model\NotEditable\Computer.cs(5:14): The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)
c:\<redacted>\bin\Debug\Model\NotEditable\Computer.cs(6:14): The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)
c:\<redacted>\bin\Debug\Model\NotEditable\Computer.cs(7:14): The type or namespace name 'Data' does not exist in the namespace 'System' (are you missing an assembly reference?)
c:\<redacted>\bin\Debug\Model\NotEditable\Computer.cs(8:14): The type or namespace name 'ComponentModel' does not exist in the namespace 'System' (are you missing an assembly reference?)
我是否正确添加这些引用,或者说我做错了什么?
args
是用来干嘛的?你从来不用它们。 - Amicable