尝试编译此代码示例:
var c = new CSharpCodeProvider();
var cp = new CompilerParameters();
var className = $"CodeEvaler_{Guid.NewGuid().ToString("N")}";
// doesn't work with or without netstandard reference
var netstandard = Assembly.Load("netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51");
cp.ReferencedAssemblies.Add(netstandard.Location);
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
var sb = new StringBuilder("");
sb.Append("namespace Jobs.Dynamic{ \n");
sb.Append($"public class {className} {{\n");
sb.Append($"public object RunSnippetCode()\n{{\n");
sb.Append("\nreturn null;\n");
sb.Append("\n}\n");
sb.Append("}");
sb.Append("}");
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
迁移到 .netstandard 2.0 之前一切正常
必须生成一个简单的类,如果只是复制代码并在 Visual Studio 中运行它,它就可以工作。具有一种返回 null 的方法的类。现在 CompileAssemblyFromSource 方法抛出
System.PlatformNotSupportedException:此平台不支持操作。在 Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) 在 Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters options, String[] sources) 在 CnetContent.Jobs.DynamicCode.. CnetContent.Jobs.Core.JobBase.EvalRunCondition(String& 错误) 处的ctor(IEnumerable
1 referencedAssemblies, IEnumerable
1 usings, String methodArgs, String codeSnippet)
我更新了 System.CodeDom 并且这个库支持 .netstandard 2.0,但是这个代码仍然不起作用。找不到任何有类似问题的案例。有任何想法吗?先感谢您!