我可以使用ICodeCompiler的服务引用来创建单元测试吗
本文关键字:创建 单元测试 引用 服务 可以使 ICodeCompiler 我可以 | 更新日期: 2023-09-27 18:27:50
我正在尝试创建一个单元测试,该测试将编译我从服务引用创建的接口。问题是,当我使用ICodeCompiler
编译接口时,它会抛出错误:
错误:找不到类型或命名空间名称"RoleAssignment"(是否缺少using指令或程序集引用?)
RoleAssignment
类来自服务引用。有没有一种方法可以将服务引用作为参数添加到ICodeCompiler
中?谢谢
这是我有的方法
CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
ICodeCompiler compiler = codeProvider.CreateCompiler();
CompilerParameters parametersForInterface = new CompilerParameters();
parametersForInterface.GenerateInMemory = true;
parametersForInterface.ReferencedAssemblies.Add("System.dll");
parametersForInterface.ReferencedAssemblies.Add("System.Data.Services.Client.dll");
parametersForInterface.ReferencedAssemblies.Add("System.ComponentModel.dll");
parametersForInterface.OutputAssembly = "inMemoryAssembly.dll";
StringBuilder interfaceSC = new StringBuilder();
CompilerResults results = compiler.CompileAssemblyFromFile(parametersForInterface, path+ @"a'IA.cs");
StringWriter sw = new StringWriter();
// If there were errors, raise an exception...
foreach (CompilerError ce in results.Errors)
{
if (ce.IsWarning) continue;
sw.WriteLine("{0}({1},{2}: error {3}: {4}", ce.FileName, ce.Line, ce.Column, ce.ErrorNumber, ce.ErrorText);
}
// If there were errors, raise an exception...
string errorText = sw.ToString();
errorText是上面提到的错误。我在单元测试中添加了一个服务引用,当我将IA.cs文件添加到项目中时,我没有收到任何错误。IA.cs是我从服务引用reference.cs生成的一个接口。我不知道是否有办法将服务引用添加到ICodeCompiler感谢
服务引用只是一个生成的.cs
文件。在Visual Studio中添加对项目的服务引用,然后在ReferencedAssemblies
中引用该项目的输出,或者定位.cs
文件并将其路径传递给CompileAssemblyFromFile
。
如果您愿意,也可以手动生成.cs
文件:https://stackoverflow.com/a/12710348/2101267