CSharpCodeProvider中LINQ扩展不可用问题求助
解决C#脚本编译时System.Xml.Linq的引用问题
嘿,我之前也踩过这个坑!你遇到的编译错误,核心原因是System.Xml.Linq是一个独立的程序集,并不是包含在你已经添加的System.Xml或者System.Linq里面的——这俩是完全不同的程序集哦。
下面给你几个具体的解决步骤,应该能搞定:
确保引用正确的程序集
不管你用的是.NET Framework还是.NET Core/.NET 5+,都需要明确引用System.Xml.Linq.dll(.NET Framework下),或者在.NET Core/现代.NET中确保编译脚本时显式指定这个基础类库组件的引用。在编译配置中添加程序集引用
如果你用的是CSharpCodeProvider(旧版编译方式),需要在CompilerParameters的ReferencedAssemblies里添加System.Xml.Linq.dll的路径:var parameters = new CompilerParameters(); parameters.ReferencedAssemblies.Add("System.Xml.Linq.dll"); // 别忘加上你已经引用的其他依赖:System.dll, System.Xml.dll, System.Linq.dll等要是用的是Roslyn(推荐的现代编译方式),则需要通过
MetadataReference添加该程序集的引用:var compilation = CSharpCompilation.Create("MyScript") .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)) .AddReferences( MetadataReference.CreateFromFile(typeof(object).Assembly.Location), MetadataReference.CreateFromFile(typeof(XDocument).Assembly.Location) // 关键:通过XDocument类型自动定位其程序集 ) .AddSyntaxTrees(CSharpSyntaxTree.ParseText(scriptCode));脚本中添加using指令
别忘了在你的C#脚本开头加上:using System.Xml.Linq;不然即使引用了程序集,代码里还是识别不了
XDocument、XElement这些类型。检查目标框架兼容性
如果你用的是.NET Framework,要确认引用的System.Xml.Linq.dll版本和你的应用目标框架版本一致;如果是.NET Core/现代.NET,不需要单独下载dll,直接通过类型引用即可(比如上面Roslyn示例里的写法会自动找到正确的路径)。
内容的提问来源于stack exchange,提问作者webworm
相关产品推荐
相关产品推荐

