2017-10-17 12 views
0

C#またはVB.NETプロジェクトを.NetModuleにコンパイルする必要があります。 DLLを発行する次のサンプルコードがあります。.csprojから.NETモジュールを取得するには、次のように変更する必要があります。Roslynでモジュールにコンパイル

ありがとうございます。

// Required Microsoft.CodeAnalysis 1.3.0  
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       //Please copy provide a path to a .csproj 
       CompileProject(@"C:\WebGoat\WebGoat.NET.csproj", @"C:\tempout").Wait(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex); 
      } 
     } 

     async static Task<string> CompileProject(string projectFilePath, string outputFolderPath) 
     { 
      using (var workspace = MSBuildWorkspace.Create()) 
      { 
       var project = workspace.OpenProjectAsync(projectFilePath).Result; 
       await Emit(project, outputFolderPath); 
       return Path.GetFileName(project.OutputFilePath); 
      } 
     } 

     async static Task Emit(Project project, string outputFolderPath) 
     { 
      Directory.CreateDirectory(outputFolderPath); 
      var compilation = await project.GetCompilationAsync(); 
      var outputFilePath = Path.Combine(outputFolderPath, Path.GetFileName(project.OutputFilePath)); 
      var pdbFilePath = Path.ChangeExtension(outputFilePath, "pdb"); 
      var compilationStatus = compilation.Emit(outputFilePath, pdbPath: pdbFilePath); 

      if (!compilationStatus.Success) 
      { 
       Console.WriteLine("Failed."); 
      } 
      else 
      { 
       Console.WriteLine("Pass."); 
      } 
     } 

答えて

1

私はあなたがCompilationOptions.OutputKind、特にOutputKind.NetModuleを探していると信じています。次のような

何か動作するはずです:

var project = workspace.OpenProjectAsync(projectFilePath).Result; 
var options = project.CompilationOptions; 
var netModuleOptions = options.WithOutputKind(OutputKind.NetModule); 
var projectWithOptions = project.WithCompilationOptions(netModuleOptions); 

今、あなたはコンパイルを取得し、通常どおりにそれを放出することができるはずです。

0

問題に

var project = workspace.OpenProjectAsync(projectFilePath).Result; 
    var options = project.CompilationOptions; 
    options = options.WithOutputKind(OutputKind.NetModule).WithPlatform(Platform.AnyCpu); 

    project = project.WithCompilationOptions(options); 
    var moduleCompilation = await project.GetCompilationAsync(); 
を固定し、次の
関連する問題