使用解决方案上的msbuild在某些项目上调用自定义目标 我一直在试图找到一个恰当的方法来利用已经存在的一个相当大的C++代码库的解决方案文件中的信息。

使用解决方案上的msbuild在某些项目上调用自定义目标 我一直在试图找到一个恰当的方法来利用已经存在的一个相当大的C++代码库的解决方案文件中的信息。,c++,visual-studio-2015,msbuild,target,C++,Visual Studio 2015,Msbuild,Target,我试图解决的问题是在解决方案中的一些项目文件上调用外部脚本,但要观察解决方案和单个项目文件中指定的已经存在的依赖关系 我已经成功地调用了said(python)脚本,方法是将自定义目标添加到我的一个项目文件中,并在vcxproj文件上使用msbuild和/t:{TargetName}命令 现在,我可以将此目标添加到需要调用此脚本的每个项目文件中,然后按照正确的顺序为每个项目文件调用msbuild,但是这会破坏利用解决方案已知的依赖关系的目的 但是,使用自定义目标调用解决方案不起作用(如其他sta

我试图解决的问题是在解决方案中的一些项目文件上调用外部脚本,但要观察解决方案和单个项目文件中指定的已经存在的依赖关系

我已经成功地调用了said(python)脚本,方法是将自定义目标添加到我的一个项目文件中,并在vcxproj文件上使用msbuild和/t:{TargetName}命令

现在,我可以将此目标添加到需要调用此脚本的每个项目文件中,然后按照正确的顺序为每个项目文件调用msbuild,但是这会破坏利用解决方案已知的依赖关系的目的

但是,使用自定义目标调用解决方案不起作用(如其他stackoverflow问题所示:)

另一方面,由于我希望能够只调用脚本目标,而不依赖于调用某些构建命令,因此在添加后期或预构建目标的一些答案中,我无法使用建议的解决方法

是否有其他方法可以使用依赖项而不必遵循msbuild和自定义目标,或者是否有其他解决方法可以满足我的目的

是否有其他方法可以使用依赖项而不必遵循msbuild和自定义目标,或者是否有其他解决方法可以满足我的目的

您可以通过编程方式构建sln,这里有一个带有c#的控制台应用程序供您参考

using Microsoft.Build.Construction;
using Microsoft.Build.Evaluation;
using Microsoft.Build.Framework;
using Microsoft.Build.Logging;
using System;

namespace LoadAllProject
{
    class Program
    {
        static void Main(string[] args)
        {
            ILogger logger = new ConsoleLogger();
            string solutionPath = @"D:\Project\Msbuild\CppApp5\CppApp5.sln";
            var solutionFile = SolutionFile.Parse(solutionPath);
            foreach (var item in solutionFile.ProjectsInOrder)
            {
                Project project = ProjectCollection.GlobalProjectCollection.LoadProject(item.AbsolutePath);
                project.SetGlobalProperty("Configuration", "Debug");
                if (project.GetPropertyValue("RootNamespace") == "CppApp5")
                {
                    project.Build(new[] { "Build", "Yourcustomtarget" }, new[] { logger });
                }
                else
                { 
                    project.Build(new[] { "Build" }, new[] { logger });
                }
            }
            Console.ReadKey();
        }
    }
}

通过一些修补,我在为所有指定了自定义目标的项目调用脚本时实现了这一点。谢谢你。但是,使用解决方案文件中的依赖项的一个重要原因是,我们可以并行执行一些项目(即没有依赖项的项目)。我还没有完全弄清楚如何告诉所有项目“在它们的依赖关系完成后”立即运行。据我所知,这种方法不支持并行。是的,我已经弄清楚了。然而,我能够使用您的基本想法和一些依赖项解析来达到我想要达到的目的。所以,谢谢你。