动态编译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
相关产品推荐
相关产品推荐

