【问题标题】:Visual Studio 2019 build order is not workingVisual Studio 2019 构建顺序不起作用
【发布时间】:2020-09-14 04:10:42
【问题描述】:

我的解决方案结构是这样的:

  1. WiX 安装程序:取决于项目 A 和 B
  2. 项目 A:依赖于项目 B
  3. 项目 B:无依赖关系

在构建依赖项中是这样配置的。显示的构建顺序(右键单击解决方案 -> 项目构建顺序)是正确的(项目 B -> 项目 A -> 安装程序)。但是由于某种原因,当我尝试重建整个解决方案时,这并不是 Visual Studio 实际尝试构建项目的顺序。它总是从项目 A 开始,这当然会导致项目 B 缺少依赖项。

如果我以正确的顺序手动构建项目,一切正常。

在我的 .sln 文件中,项目的列表如下:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectA", ProjectA\ProjectA.csproj", "{B80B7A8F-0576-41FA-BD3D-B3C6F5F8D6E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectB", "ProjectB\ProjectB.csproj", "{D127D2C1-0F13-41F1-B4A1-218BC53ABC40}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "Installer", "Installer\Installer.wixproj", "{1D504782-E92A-4C60-9ADC-6067E7E301AA}"
    ProjectSection(ProjectDependencies) = postProject
        {B80B7A8F-0576-41FA-BD3D-B3C6F5F8D6E7} = {B80B7A8F-0576-41FA-BD3D-B3C6F5F8D6E7}
        {D127D2C1-0F13-41F1-B4A1-218BC53ABC40} = {D127D2C1-0F13-41F1-B4A1-218BC53ABC40}
    EndProjectSection
EndProject

知道什么可能导致这个问题吗?

【问题讨论】:

  • 您是如何构建出现此问题的整个解决方案的?在我这边,我运行整个解决方案,它按照您所说的正确顺序构建。你能告诉我们你做了哪些步骤导致了这个问题吗?

标签: visual-studio msbuild wix


【解决方案1】:

通常,构建顺序保存在解决方案文件(.sln 文件)中,如下所示:

因此,当您使用它时,您应该使用该文件构建整个解决方案。但是

然而,在vs IDE中,当你构建单个项目时,可以按照指定的构建顺序,但是在msbuild命令行中,msbuild projectA.xxproj并不是先构建B再按照构建A到指定的依赖项。这也是 vs ide 独有的,尽管构建依赖项存储在 xxx.sln 而不是单独的 xxx.proj 文件中。

除非整个解决方案(msbuild xxx.sln)是在 MSBuild 命令行中构建的,否则它将按顺序构建。

这种情况通常会导致这种差异。

但由于某种原因,当我尝试重建整个解决方案时,那不是 Visual Studio 实际尝试构建项目的顺序。

我想知道你做了什么导致了这个问题,如果你构建了整个解决方案(xxx.sln 文件),这个问题就不会发生。所以我想知道哪种构建格式或您对解决方案做了什么。

由于 MSBuild 无法构建wixproj 文件,所以您应该使用VS IDE 或devenv xxx.sln /build 来构建整个解决方案。

建议

作为建议,您可以使用 Project Reference 来指定构建顺序,这将在每个 xxx.proj 而不是 xxx.sln 文件中设置顺序。这将更加可靠和安全。

1) 移除Project Dependencies下的构建订单(右键Solution)

2) 右击WIX项目-->References-->Add Reference-->Projects-->选择Project AProject B

3) 右击项目A-->References-->Add Reference-->Project-->Project B

另外,如果对您没有帮助,请与我们分享您造成此问题的原因以及导致此问题的任何步骤,以便我们更快地解决您的问题。

更新 1

Eric 的提示,感谢他分享解决方案和测试结果。

解决方案

首先,删除所有项目依赖项,然后重新添加它们,然后解决问题。这个项目可能是一个问题,因为它是从旧的 VS2010 迁移而来的。

【讨论】:

  • 我编辑了我的问题并添加了我的 .sln 文件的部分。看起来 ProjectA 的依赖项没有保存到解决方案中。这些项目已经按照您的建议相互引用。
  • 我想通过删除所有依赖项并再次读取它们来修复它。我不知道是什么导致 .sln 文件中缺少依赖项。从旧版 Visual Studio 迁移项目时可能会出现一些错误。它最初是用 Visual Studio 2010 编写的。
【解决方案2】:

我遇到了同样的问题。我能够在 Visual Studio 中构建我的解决方案。但是当使用 MSBuild 在 Azure DevOps Pipelines 上构建它时,它以错误的顺序构建它们;我的 WiX .wixproj 项目是在其依赖项之一之前构建的。

我的.sln 文件如下所示:

我为解决这个问题所做的是手动向该文件添加更多依赖项:

所以我的建议是查看您的 .sln 文件并添加您认为有意义的其他依赖项。

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 2020-06-03
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多