2016-12-13 11 views
2

ローズンコンパイラの出力にアイコンを出力するにはどうすればよいですか? CodeDOMではEmit Win32Icon with Roslyn

私は単にCompilerOptionsを使用して「/ win32icon:」としてそれを追加することができ

しかし、どのようロザリンしますか?

私はこれを既に持っています。

var syntaxTree = CSharpSyntaxTree.ParseText(File.ReadAllText("program.cs")); 
     CSharpCommandLineArguments arguments = new CSharpCommandLineArguments(); 
     arguments.Win32Icon = @"ICON PATH"; 

     CSharpCompilation compilation = CSharpCompilation.Create(
      "program", 
      new[] { syntaxTree }, 
      new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) }, 
      new CSharpCompilationOptions(OutputKind.ConsoleApplication)); 

     ResourceWriter rs = new ResourceWriter("res.resources"); 

     var resourceDescription = new ResourceDescription("program.Resources.resources",() => new MemoryStream(File.ReadAllBytes("res.resources")), true); 

     using (var dllStream = new MemoryStream()) 
     using (var pdbStream = new MemoryStream()) 
     { 
      var emitResult = compilation.Emit(dllStream, pdbStream, null,null, manifestResources: new [] {resourceDescription}); 
      if (emitResult.Success) 
      { 
       File.WriteAllBytes("test.exe",dllStream.GetBuffer()); 
       Console.WriteLine("compiled"); 
      } 
      else 
      { 
       Console.WriteLine("foutje: {0}", emitResult.Diagnostics[0].ToString()); 
      } 
     } 

     Console.ReadLine(); 

助けてくれてありがとう!

答えて

1

Stream iconInIcoFormatパラメータをとるCompilation.CreateDefaultWin32Resourcesで作成したemitにwin32Resourcesオプションを渡す必要があります。

compilation.Emit(
    peStream: peStream, 
    pdbStream: pdbStream, 
    win32Resources: compilation.CreateDefaultWin32Resources(..., iconInIcoFormat: File.Open("<pathTo.ico>"))) 

より詳細なexmapleはhere

です