2017-06-16 19 views
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 '$'

+0

このコードをどのようにコンパイルしますか?コンパイラのバージョンは? C#6.0の構文を理解して解析できるコンパイラが必要です – Steve

+0

どのVisual Studioのバージョンを使用していますか?完全なC#6.0をサポートするには、VS2015またはVS2017が必要です。 – Atesh052

+0

@ Atesh052私はVS2017を使用しています。 –

答えて

関連する問題