Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Roslyn编译到模块_Roslyn_Roslyn Code Analysis - Fatal编程技术网

使用Roslyn编译到模块

使用Roslyn编译到模块,roslyn,roslyn-code-analysis,Roslyn,Roslyn Code Analysis,我需要将任何C#或VB.NET项目编译为.NetModule。我有以下发出DLL的示例代码,需要一些帮助来修改以下代码,以便从.csproj中获得.NetModules 提前谢谢 // Required Microsoft.CodeAnalysis 1.3.0 class Program { static void Main(string[] args) { try {

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

提前谢谢

// 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.");
            }
        }
//必需的Microsoft.CodeAnalysis 1.3.0
班级计划
{
静态void Main(字符串[]参数)
{
尝试
{
//请复制并提供指向.csproj的路径
CompileProject(@“C:\WebGoat\WebGoat.NET.csproj”,@“C:\tempout”).Wait();
}
捕获(例外情况除外)
{
控制台写入线(ex);
}
}
异步静态任务CompileProject(string projectFilePath、string outputFolderPath)
{
使用(var workspace=MSBuildWorkspace.Create())
{
var project=workspace.OpenProjectAsync(projectFilePath).Result;
等待发射(项目,outputFolderPath);
返回Path.GetFileName(project.OutputFilePath);
}
}
异步静态任务发出(项目,字符串outputFolderPath)
{
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);
如果(!compilestatus.Success)
{
Console.WriteLine(“失败”);
}
其他的
{
控制台。写线(“通过”);
}
}

我相信您正在寻找,而且特别是

类似于以下内容的操作应该可以工作:

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();