You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态编译Razor内容时出现CS0115、CS0103编译错误的求助

动态编译Razor内容时出现CS0115、CS0103编译错误的求助

这是针对「无法编译Razor文档」问题的跟进提问。我在编译Razor内容(不是文件)时遇到了好几个错误,以下是我的实现代码:

var content = File.ReadAllText("RazorComponent.razor");
var assemblyName = "RazorComponent";
var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location)!;
var document = RazorSourceDocument.Create(content, assemblyName + ".razor");

var options = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);

var references = new MetadataReference[]
{
    MetadataReference.CreateFromFile(Assembly.GetExecutingAssembly().Location),
    MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
    MetadataReference.CreateFromFile(typeof(IComponent).Assembly.Location),
    MetadataReference.CreateFromFile(typeof(RazorCompiledItemAttribute).Assembly.Location),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "mscorlib.dll")),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.dll")),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Core.dll")),
    MetadataReference.CreateFromFile(Path.Combine(assemblyPath, "System.Runtime.dll"))
};

var engine = RazorProjectEngine.Create(
    RazorConfiguration.Default,
    RazorProjectFileSystem.Create("."),
    builder =>
    {
        builder.ConfigureClass((doc, node) =>
        {
            node.BaseType = typeof(ComponentBase).FullName;
        });
    });

var codeDocument = engine.Process(source: document, fileKind: null, importSources: [], tagHelpers: []);
var csDocument = codeDocument.GetCSharpDocument();
var syntaxTree = CSharpSyntaxTree.ParseText(csDocument.GeneratedCode);
var compilation = CSharpCompilation.Create(assemblyName, [syntaxTree], references, options);

using var assemblyStream = new MemoryStream();
var result = compilation.Emit(assemblyStream);

编译后result.Success返回false,同时出现以下错误:

  • error CS0115: 'Template.ExecuteAsync()': no suitable method found to override
  • error CS0103: The name 'WriteLiteral' does not exist in the current context
  • error CS0103: The name 'Write' does not exist in the current context

我检查了生成的代码,发现生成的类名为Template,继承自ComponentBase,但它尝试重写一个不存在的ExecuteAsync方法;同时在方法内部调用的Write和WriteLiteral方法也不存在。

请问我到底遗漏了什么配置?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 03:10:00