2012-02-12 9 views
2

実行時にアプリケーションのコードを動的に作成できるように、CodeDomを動作させようとしています。しかし、多くのチュートリアルや試行錯誤の末、私は私が合格できないような問題に遭遇しました。私はそれがまさにそうであるように見えるコードでコンパイラーのエラーを取得し続けます。自分のコードのどこにでも '\'がないときは、「認識できないエスケープシーケンス '\'」を取得します。CodeDomコンパイラfor C#

私が手にエラーがここでは1行目にすべてです、彼らは順序である: CS1009 CS1056(行で3回) CS0116

ここで私が持っているものです。

コードであることコンパイル:

using System; 
using System.Windows.Forms; 
namespace sdjkfhj 
{  
    public class Sample 
    { 
     public static void main() 
     { 
      MessageBox.Show("Working"); 
      return; 
     } 
    } 
} 

およびコンパイラのコードは次のとおりです。

public void Compile(string file) 
    { 
     var prov = new Dictionary<string, string>(); 
     prov.Add("CompilerVersion", "v2.0"); 
     CSharpCodeProvider c = new CSharpCodeProvider(); 
     ICodeCompiler comp = c.CreateCompiler(); 

     CompilerParameters param = new CompilerParameters(); 
     param.GenerateExecutable = true; 
     param.OutputAssembly = file + ".exe"; 
     param.ReferencedAssemblies.Add("System.dll"); 
     param.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 
     if (c.Supports(GeneratorSupport.EntryPointMethod)) 
      param.MainClass = "Sample"; 

     CompilerResults results = comp.CompileAssemblyFromSource(param, file); 

     if (results.Errors.Count > 0) 
     { 
      foreach (CompilerError CompErr in results.Errors) 
      { 
       MessageBox.Show("Line number " + CompErr.Line + ", Error Number: " + CompErr.ErrorNumber + ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine); 
      } 
     } 
    } 

私はそれを正しくコンパイルするつもりはないのですか?私は行方不明のものがありますか?私はここで一種迷っています。前もって感謝します。

+0

?それはVSでコンパイルしていますか? –

+0

はずの 'CompileAssemblyFromSourceは()' 'のソースが含まれています'ファイルの代わりに'? – C4u

答えて

5

3つのことがすぐに頭に浮かぶ:コンパイルしようとしているコードにはセミコロンはありません

  1. メインがあなたのエントリーポイントであると思われる場合は、それを静的にします。
  2. これらは実際には最初のステップである定着(ターゲットファイルとは異なるparam.OutputAssembly = file + ".exe";

のようなものを自分のソースファイルを作成し、また、あなたの出力を参照する必要がありますアセンブリを設定する必要があり、それよあなたはどちらか使用しているCompilerParametersにMainClassを設定するには悪い考えではないでしょう。行はエラーになります

A nice example on MSDN

+0

編集:変更を表すコードを編集しました。 - セミコロンの物はすでに入っていました。私は、ここに貼り付ける前にそれらを再追加するのを忘れたと思います。とにかく、メインを静的に変更してください。すべてのリソースdllを追加してください。 MainClass = "Sample"、チェックしてください。ファイル出力名が異なっています。結果:まったく同じ行に同じ5つのエラーがあります。これは私が得意ではないものですが、これらの変更はすべて意味がありますが、出力はそれを表していません。私は基本的にはmsdnからソースをコピーしても成功しませんでした。あなたの助けてくれてありがとう、しかし私はそれを調べ続ける必要があります。 – ozdrgnaDiies

+2

'CompileAssemblyFromSource'を' CompileAssemblyFromFile'に変更してください – mlorbetske

+0

ありがとう、それは私の一部では非常に単純な間違いでした。それをFromFileに変更し、MainClassをClassnameの代わりにNamespace.Classnameに変更した後、私はそれをコンパイルします。それを指摘していただきありがとうございます、すべての作品は今。 – ozdrgnaDiies