我正在进行单元测试代码生成器。单元测试的基本流程是:
单元测试调用适当的方法并生成代码。很容易。
单元测试编译生成的c#代码(步骤#1)。如果代码合并,请继续执行步骤3,否则停止所有操作。
如果步骤#2成功,则单元测试然后对生成的步骤2的编译代码运行其他预先编写的单元测试。为此,我将使用此处描述的解决方案:Running individual NUnit tests programmatically和{ {3}}。
步骤#2的方法就是这个问题:我想我有两个选择(1)运行Visual Studio命令行来编译解决方案或者(2)使用 带有CompilerParameters的CSharpCodeProvider。任何建议都将不胜感激。
答案 0 :(得分:0)
我个人每天都会使用Roslyn,因此我很想和Kenneth一起推荐它,但是,在你的情况下,如果您想知道的唯一信息是编译代码,我会更倾向于CSharpCodeProvider
类,特别是在每个进行单元测试的方法生成单个代码文件时。如果您必须对生成的代码进行任何类型的分析,或者如果您,可能值得使用Roslyn,但我怀疑这是您的情况。唯一的其他职业Roslyn可能会带给你的是你可以open up a whole project/solution直接而不是尝试编译每个单独的文件,这可能会吸引你(这比你想象的要简单得多)。
除了这个建议,我只能说,如果你只需要在CSharpCodeProvider
和命令行选项之间做出选择,我肯定会选择CSharpCodeProvider
,因为它已经包装并暴露了与您分析相关的数据和操作(是否有任何错误?=>让我们检查是否compiledResults.Errors.Count == 0
)。你不需要调用外部进程(C#编译器)来获得你想要的东西,这使得它在我看来更简单,同时也具有很大的灵活性(即CompilerParameters
)
我不知道你是否已经开始玩它,但你不应该对这个方法有太多问题。希望这会有所帮助。