我可以使用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感谢

我可以使用ICodeCompiler的服务引用来创建单元测试吗

服务引用只是一个生成的.cs文件。在Visual Studio中添加对项目的服务引用,然后在ReferencedAssemblies中引用该项目的输出,或者定位.cs文件并将其路径传递给CompileAssemblyFromFile

如果您愿意,也可以手动生成.cs文件:https://stackoverflow.com/a/12710348/2101267