C# 在MSBuild文件中,如何获取引用的项目?

C# 在MSBuild文件中,如何获取引用的项目?,c#,visual-studio-2010,msbuild,C#,Visual Studio 2010,Msbuild,我有一个MSBuild脚本文件,希望对文件中导入的每个项目执行一个操作 如何访问引用的项目?不清楚您希望对每个项目执行何种操作。假设您只想打印出引用项目的路径,下面是示例代码: Dictionary<string, string> globalProperties = new Dictionary<string, string>(); globalProperties.Add("Configuraion", "Debug&q

我有一个MSBuild脚本文件,希望对文件中导入的每个项目执行一个操作


如何访问引用的项目?

不清楚您希望对每个项目执行何种操作。假设您只想打印出引用项目的路径,下面是示例代码:

    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(@"MyProject.csproj", "4.0");

    foreach (ProjectItem pi in sln.Items)
    {
        if (pi.ItemType == "ProjectReference")
        {
            Console.WriteLine(pi.EvaluatedInclude);
        }
    }
Dictionary globalProperties=new Dictionary();
添加(“配置”、“调试”);
添加(“平台”、“任何CPU”);
ProjectCollection pc=新的ProjectCollection(全局属性);
Project sln=pc.LoadProject(@“MyProject.csproj”,“4.0”);
foreach(sln.项目中的项目pi)
{
if(pi.ItemType==“项目参考”)
{
Console.WriteLine(pi.EvaluatedInclude);
}
}
上面的代码使用Microsoft.Build.dll中的类型,Microsoft.Build.dll是MSBuild的一部分


请注意,理论上,项目引用取决于生成参数,例如,您可能会在调试配置时引用调试库,但在发布时不会引用。因此,在初始化ProjectCollection时,必须传递所需的参数。

不清楚要对每个项目执行何种操作。假设您只想打印出引用项目的路径,下面是示例代码:

    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(@"MyProject.csproj", "4.0");

    foreach (ProjectItem pi in sln.Items)
    {
        if (pi.ItemType == "ProjectReference")
        {
            Console.WriteLine(pi.EvaluatedInclude);
        }
    }
Dictionary globalProperties=new Dictionary();
添加(“配置”、“调试”);
添加(“平台”、“任何CPU”);
ProjectCollection pc=新的ProjectCollection(全局属性);
Project sln=pc.LoadProject(@“MyProject.csproj”,“4.0”);
foreach(sln.项目中的项目pi)
{
if(pi.ItemType==“项目参考”)
{
Console.WriteLine(pi.EvaluatedInclude);
}
}
上面的代码使用Microsoft.Build.dll中的类型,Microsoft.Build.dll是MSBuild的一部分


请注意,理论上,项目引用取决于生成参数,例如,您可能会在调试配置时引用调试库,但在发布时不会引用。因此,在初始化ProjectCollection时,您必须传递所需的参数。

谢谢您的回答,实际上我想将多个项目组装到一个最终的可部署包中。通常,可执行文件bin文件夹将包含所有内容,但我的“应用程序”实际上是一套必须打包并一起部署的可执行文件。我可以简单地更改目标文件夹,将它们放在一个公共文件夹中,但我发现它很小,而且容易出错,我正在寻找一种方法来自动化这个过程。@Newtopian,这与您最初发布的问题不同。请提出一个新问题。是的,我想到了一个解决方案,这个方案带来了现在的问题。我只是想给你一些关于它起源的观点。我仍将尝试它,但我已在这里的另一个问题中发布了更广泛的问题,以防出现更好的解决方案。我希望找到答案,实际上我希望将多个项目组合在一个最终的可部署包中。通常,可执行文件bin文件夹将包含所有内容,但我的“应用程序”实际上是一套必须打包并一起部署的可执行文件。我可以简单地更改目标文件夹,将它们放在一个公共文件夹中,但我发现它很小,而且容易出错,我正在寻找一种方法来自动化这个过程。@Newtopian,这与您最初发布的问题不同。请提出一个新问题。是的,我想到了一个解决方案,这个方案带来了现在的问题。我只是想给你一些关于它起源的观点。我仍然会尝试,但我已经在这里的另一个问题中发布了更广泛的问题,以防出现更好的解决方案