我开始想知道如何使用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我可以获得我需要的引用,但我想我仍然错误地添加它们。
答案 0 :(得分:0)
您不需要更改从Project.GetCompilationAsync
返回的选项或引用。您应该可以直接致电Emit
。
请注意,您应该按照拓扑排序顺序发出项目,可以从Solution.GetProjectDependencyService
获取。