【问题标题】:Can i use a Service Reference with ICodeCompiler in order to create a unit test?我可以使用 ICodeCompiler 的服务引用来创建单元测试吗?
【发布时间】:2025-11-29 20:30:02
【问题描述】:

我正在尝试创建一个单元测试,它将编译我从服务引用创建的接口。问题是当我使用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 谢谢

【问题讨论】:

  • 您需要创建一个Minimal, Complete, and Verifiable example 来说明您要执行的操作。由此,人们可以告诉你你做错了什么。
  • 所以您正试图通过已经引用RoleAssignment 的代码编译服务参考代码,这在尚未编译的代码中?也许试着解释你的问题,而不是你试图解决它的方式......为什么你需要用 ICodeCompiler 编译代码?
  • 我刚刚添加了有关我遇到的问题的更多信息。我希望现在更清楚了。

标签: c#


【解决方案1】:

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

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

【讨论】:

    最近更新 更多