C# 从文本运行时编译类时使用ValueTuple
我试图在运行时从文本编译一个类。我的问题是,我的类在函数(AllLines)中使用了valueTupe,并且在使用此代码时收到错误“C:\xxxx.cs(19,28):错误CS0570:“BaseClass.AllLines”不受语言支持C# 从文本运行时编译类时使用ValueTuple,c#,codedom,valuetuple,C#,Codedom,Valuetuple,我试图在运行时从文本编译一个类。我的问题是,我的类在函数(AllLines)中使用了valueTupe,并且在使用此代码时收到错误“C:\xxxx.cs(19,28):错误CS0570:“BaseClass.AllLines”不受语言支持 CodeDomProvider objCodeCompiler = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider(); CompilerParameters
CodeDomProvider objCodeCompiler = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("mscorlib.dll");
objCompilerParameters.ReferencedAssemblies.Add("System.IO.dll");
objCompilerParameters.ReferencedAssemblies.Add("System.Linq.dll");
CompilerResults objCompileResults = objCodeCompiler.CompileAssemblyFromFile(objCompilerParameters, filename);
编辑:
文本文件如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
namespace MyNamespace
{
public abstract class BaseClass
{
public List<(int LineNumber, string Value)> AllLines
{
...
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间MyNamespace
{
公共抽象类基类
{
公共列表所有行
{
...
}
}
}
我正在使用Microsoft.CodeDom.Providers.DotNetCompilerPlatform v2.0.0.0,
Microsoft(R)Visual C#编译器版本1.0.0.50618
不确定这是否是roslyn的实际版本。我认为这是因为您忘记了Methodos
AllLines()
:-)首先,您使用roslyn的方式与使用NuGet软件包中的Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider一样正确
但是,您面临的问题是您的文本文件不包含有效的C
List
的声明无效List
只接受一个类型参数时,您提供了两个类型参数。(也许你想用字典
)using System;
using System.Collections.Generic;
using System.Linq;
namespace MyNamespace
{
public abstract class BaseClass
{
public Dictionary<int, string> AllLines
{
get; set;
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间MyNamespace
{
公共抽象类基类
{
公共词典所有行
{
获得;设置;
}
}
}
注意,在本例中,实际上不需要
使用System
或使用System.Linq
。还要注意的是,您不需要使用Roslyn进行此操作。老式的CodeDOM可以编译它(用Microsoft.CSharp.CSharpCodeProvider
替换Microsoft.CSharp.CSharpCodeProvider
)。您能提供一个包括您正在使用的软件包版本在内的?(特别是,如果您使用的是Roslyn的旧版本,这肯定可以解释。)谢谢。完成后,请查看我的编辑。不确定这是否是我的roslyn版本。尝试那里的代码会产生完全不同的错误。这就是为什么我要求提供一个完整的示例—我们可以非常轻松地构建和运行它。@WynDiesel,您可以直接使用CodeDom
,而不是Roslyn
@WynDiesel:这并不是真的疏忽—提出一个完整示例的过程通常可以解决问题:)不,上面提到的@DaisyShipton,代码不完整。该方法内部有一个get{}。明天我将编辑我的问题,以获得一个可用且完整的示例。谢谢你的回复,安迪。在第1点、第2点和第3点,C#7有一个称为命名元组的新特性,该特性与我的示例相同(请参阅)。关于第4点,您是正确的,在我的示例中,我没有提供属性的代码。这也不是我的问题。文件的代码符合要求,与实际代码没有问题。我还没有弄清楚问题出在哪里,根据你的建议,我最终使用了CodeDom。由于没有更好的答案,我将接受你的。