C# 用于检查项目文件中的项目变量和引用路径的api

C# 用于检查项目文件中的项目变量和引用路径的api,c#,.net,xml,visual-studio-2010,msbuild,C#,.net,Xml,Visual Studio 2010,Msbuild,我正在开发一个.net应用程序(VS2010),其中包含x个解决方案和可变数量的项目。 我需要检查项目属性(特定于特定数量的项目)是否同质,并且在构建期间检查/验证参考路径。 是否有一个API可以这样做?如果没有,我如何构建一个?您可以使用MSBuild framework对项目文件进行解析和评估。您需要使用的主要类是和 但首先需要处理.sln文件。由于API无法直接加载.sln文件,您需要首先将.sln文件转换为API可以加载的项目文件。描述了该方法。转换后,您将获得一个.sln.metapr

我正在开发一个
.net应用程序(VS2010)
,其中包含x个解决方案和可变数量的项目。 我需要检查项目属性(特定于特定数量的项目)是否同质,并且在构建期间检查/验证参考路径。
是否有一个API可以这样做?如果没有,我如何构建一个?

您可以使用MSBuild framework对项目文件进行解析和评估。您需要使用的主要类是和

但首先需要处理.sln文件。由于API无法直接加载.sln文件,您需要首先将.sln文件转换为API可以加载的项目文件。描述了该方法。转换后,您将获得一个.sln.metaproj文件,该文件相当于.sln的表示形式,但具有MSBuild格式。之后,您可以解析.sln.metaproj文件和引用的项目,并评估所需的属性。此示例打印出解决方案中所有项目的调试| AnyCPU配置的OutputPath属性评估:

    Dictionary<string, string> globalProperties = new Dictionary<string, string>();

    globalProperties.Add("Configuraion", "Debug");
    globalProperties.Add("Platform", "AnyCPU");

    ProjectCollection pc = new ProjectCollection(globalProperties);

    Project sln = pc.LoadProject(@"my_directory\My_solution_name.sln.metaproj", "4.0");

    foreach (ProjectItem pi in sln.Items)
    {
        if (pi.ItemType == "ProjectReference")
        {
            Project p = pc.LoadProject(pi.EvaluatedInclude);
            ProjectProperty pp = p.GetProperty("OutputPath");
            if (pp != null)
            {
                Console.WriteLine("Project=" + pi.EvaluatedInclude + " OutputPath=" + pp.EvaluatedValue);
            }
        }
    }
Dictionary globalProperties=new Dictionary();
添加(“配置”、“调试”);
添加(“平台”、“任何CPU”);
ProjectCollection pc=新的ProjectCollection(全局属性);
Project sln=pc.LoadProject(@“my_directory\my_solution_name.sln.metaproj”,“4.0”);
foreach(sln.项目中的项目pi)
{
if(pi.ItemType==“项目参考”)
{
项目p=pc.LoadProject(pi.EvaluatedInclude);
ProjectProperty pp=p.GetProperty(“OutputPath”);
如果(pp!=null)
{
Console.WriteLine(“项目=“+pi.EvaluatedInclude+”输出路径=“+pp.EvaluatedValue”);
}
}
}

虽然解决方案文件是适当的(但可读),但项目文件(*.csproj或*.vbproj)是xml(msbuild文件)。您可以编写一个在这些文件中执行xpath查找的工具。谢谢…我还没有测试这个,但至少我知道我有一个开始!!:)