Компилировать в модуль с Roslyn

Мне нужно скомпилировать любой проект C# или VB.NET в.NetModule. У меня есть следующий пример кода, который испускает библиотеки DLL, нужна помощь, чтобы изменить следующие, чтобы получить.NetModules из.csproj

Заранее спасибо.

// 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.");
            }
        }

2 ответа

Я верю, что вы ищете 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);

Теперь вы сможете получить компиляцию и создать ее, как обычно.

После исправлена ​​проблема

   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();
Другие вопросы по тегам