如何使用Roslyn MSBuildWorkspace找到C#项目的'obj'目录?

时间:2017-03-11 17:41:01

标签: c# .net msbuild roslyn

我正在使用Roslyn使用MsBuildWorkspace编译包含多个项目的C#解决方案。

很容易找到Project的输出文件,因为我可以使用OutputFilePath属性。

但我无法找到找出'intermediate'目录的方法(通常这是'obj'目录,但可以使用MSBuild属性BaseIntermediateOutputPathIntermediateOutputPath进行更改。 csproj文件。)

有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以使用Microsoft.Build.Evaluation.Project中的Microsoft.Build.dll获取项目属性:

void foo(String projectPath, IDictionary<String, String> globalProperties, String toolsVersion)
{
    Project project = new Project(projectPath, globalProperties, toolsVersion);
    String baseIntermediateOutputPath = GetProjectProperty(project, "BaseIntermediateOutputPath");
    String intermediateOutputPath = GetProjectProperty(project, "IntermediateOutputPath");
    // ....
}

static String GetProjectProperty(Microsoft.Build.Evaluation.Project project, String propertyName)
{
    return project.Properties
                  .FirstOrDefault(prop => String.Equals(prop.Name, propertyName, StringComparison.OrdinalIgnoreCase))
                 ?.EvaluatedValue;
}