Я пишу инструмент, который генерирует код 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?)
Я правильно добавляю эти ссылки или делаю что-то не так?