首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Roslyn编译为模块

使用Roslyn编译为模块
EN

Stack Overflow用户
提问于 2017-10-18 00:32:45
回答 2查看 205关注 0票数 0

我需要将任何C#或VB.NET项目编译成.NetModule。我有以下示例代码,它发出的DLL,需要一些帮助来修改以下内容,以获得从.csproj的.NetModules

提前谢谢。

代码语言:javascript
复制
// 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.");
            }
        }
EN

回答 2

Stack Overflow用户

发布于 2017-10-18 02:29:04

我相信你在找CompilationOptions.OutputKind,特别是OutputKind.NetModule

类似下面这样的代码应该可以工作:

代码语言:javascript
复制
var project = workspace.OpenProjectAsync(projectFilePath).Result;
var options = project.CompilationOptions;
var netModuleOptions = options.WithOutputKind(OutputKind.NetModule);
var projectWithOptions = project.WithCompilationOptions(netModuleOptions);

现在,您应该能够像往常一样获得一个编译并发出它。

票数 1
EN

Stack Overflow用户

发布于 2017-10-19 16:42:56

下面修复了这个问题

代码语言:javascript
复制
   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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46795000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档