Roslyn Workspace API:将解决方案中的每个项目发送到dll

时间:2015-01-03 14:01:03

标签: roslyn

我开始想知道如何使用Rolsyn的Workspace API和Compiler API发布C#项目。

这是我到目前为止所得到的:

var msBuild = MSBuildWorkspace.Create();

var sln = msBuild.OpenSolutionAsync
    (@"D:\User\Documents\visual studio 14\Projects\ConsoleApplicationWorkspaces"
    +@"\ConsoleApplicationWorkspaces.sln").Result;

foreach (var item in sln.Projects)
{
    EmitProject(item);
}


public static async void EmitProject(Project proj)
{
   var c = await proj.GetCompilationAsync();

   var options = new CSharpCompilationOptions
    (OutputKind.DynamicallyLinkedLibrary);

   c = c.WithOptions(options);

   c = c.AddReferences(proj.MetadataReferences);

   var result = c.Emit("my" + proj.Name + ".dll");

   Console.WriteLine(r.Success);
}

此代码不起作用。 根据诊断信息,我没有添加像“System.Runtime”,“System.Linq”这样的引用。

使用Workspace API我可以获得我需要的引用,但我想我仍然错误地添加它们。

1 个答案:

答案 0 :(得分:0)

您不需要更改从Project.GetCompilationAsync返回的选项或引用。您应该可以直接致电Emit

请注意,您应该按照拓扑排序顺序发出项目,可以从Solution.GetProjectDependencyService获取。