0
私は実行時にコードをコンパイルしようとしていて、そこにクラスのインスタンスを作成しようとしていますが、文字列補間のようなC#6以上の機能を使用するとエラーが発生します。ここで私はコンパイルするために使用しているコードは次のとおりです。実行時にC#-6.0 +コードをコンパイルするには?
using (var cs = new CSharpCodeProvider())
{
var assembly = typeof(MyType).Assembly;
var cp = new CompilerParameters()
{
GenerateInMemory = false,
GenerateExecutable = false,
IncludeDebugInformation = true,
};
if (Environment.OSVersion.Platform.ToString() != "Unix") cp.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true);
else cp.TempFiles.KeepFiles = true;
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
cp.ReferencedAssemblies.Add(assembly.Location);
CompilerResults cr;
if (Directory.Exists(path))
{
string[] files = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);
cr = cs.CompileAssemblyFromFile(cp, files);
}
else cr = cs.CompileAssemblyFromFile(cp, new string[] { path });
if (cr.Errors.HasErrors)
throw new Exception("Compliation failed, check your code.");
var types = cr.CompiledAssembly.GetTypes();
var myType = types.Where(x => x.GetInterfaces().Contains(typeof(MyType))).FirstOrDefault();
if (myType == null)
throw new TypeLoadException("Could not find MyType class");
return (MyType)cr.CompiledAssembly.CreateInstance(myType.FullName);
}
私のようなもの使用するコードにコンパイルしようとすると、今:
string name = $"My name is {name}";
を、私はこの例外を取得: Unexpected character '$'
このコードをどのようにコンパイルしますか?コンパイラのバージョンは? C#6.0の構文を理解して解析できるコンパイラが必要です – Steve
どのVisual Studioのバージョンを使用していますか?完全なC#6.0をサポートするには、VS2015またはVS2017が必要です。 – Atesh052
@ Atesh052私はVS2017を使用しています。 –