Msbuild引用解析



我最近一直在做一些分析不同项目在源代码控制中的关系的工作。到目前为止,我一直在使用PowerShell和XPath通过Select-Xml cmdlet来处理我们的csproj文件,但是这依赖于我对MSBuild如何在项目文件中使用ProjectReference和Reference元素的微弱知识。我突然意识到,如果我可以使用MSBuild本身来解析引用,然后以某种方式检查引用解析过程的结果,那将会更好。

MSBuild专家:这看起来可能吗?这是否需要编写自定义目标文件或其他内容?我会被迫也建设项目,以及因为csproj文件也导入微软。csharp .目标?

任何见解都会很好。谢谢!

这真的很简单。首先引用这些程序集:

Microsoft.Build
Microsoft.Build.Engine
Microsoft.Build.Framework
Microsoft.Build.Utilities.v4.0

…你可以围绕MSBuild对象模型创建一些工具。我有一个自定义的MSBuild任务,在构建中做这个分析,下面的代码片段:

private bool CheckReferences(string projectFullPath)
{
    var project = new Project(projectFullPath);
    var items = project.GetItems("Reference");
    if (items == null)
        return true;
    foreach (var item in items)
    {
        if (item == null)
            continue;
        if (string.IsNullOrWhiteSpace(item.UnevaluatedInclude))
            continue;
        if (!item.HasMetadata("HintPath"))
            continue;
        string include = item.UnevaluatedInclude;
        string hintPath = item.GetMetadata("HintPath").UnevaluatedValue;
        if (!string.IsNullOrWhiteSpace(hintPath))
            if (hintPath.Contains(@"C:") || hintPath.Contains("C:/"))
                LogWarning("Absolute path Reference in project {0}", projectFullPath);
    }
    return true;
}

相关内容

  • 没有找到相关文章

最新更新