Visual Studio 2019 构建顺序无效
Visual Studio 2019 build order is not working
我的解决方案结构是这样的:
- WiX 安装程序:取决于项目 A 和 B
- 项目 A:取决于项目 B
- 项目 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
知道是什么导致了这个问题吗?
通常,构建顺序保存在解决方案文件(.sln
文件)中是这样的:
因此,当您使用它时,您应该使用该文件构建整个解决方案。但是
但是,在vs IDE中,构建单个项目时,可以按照指定的构建顺序,但是在msbuild命令行中,msbuild projectA.xxproj
不会先构建B再根据指定的依赖构建A。这也是 vs ides 独有的,尽管构建依赖项存储在 xxx.sln
而不是单独的 xxx.proj
文件中。
除非整个解决方案(msbuild xxx.sln
)在MSBuild命令行中构建,否则将按顺序构建。
这种情况通常会导致这种差异。
But for some reason when i try to rebuild the whole solution thats not
the order in which Visual Studio actually tries to build the projects.
我想知道你做了什么导致了这个,如果你构建整个解决方案(xxx.sln
文件),这个问题就不会发生。所以我想知道哪种构建格式或您对解决方案做了什么。
由于 MSBuild 无法构建wixproj
文件,因此您应该使用VS IDE 或devenv xxx.sln /build 来构建整个解决方案。
建议
作为建议,您可以使用 项目参考 来指定构建顺序,这将在每个 xxx.proj
而不是 xxx.sln
文件中设置顺序。这样会更可靠和安全。
1) 删除 Project Dependencies 下的构建命令(右键单击解决方案)
2)右击WIX项目-->References
-->Add Reference
- ->Projects
-->Select Project A
和 Project B
.
3)右击项目A-->References
-->Add Reference
-->Project
--> Project B
.
此外,如果它对您没有帮助,请与我们分享导致此问题的原因以及导致该问题的任何步骤,以便帮助我们解决您的问题问题更快。
更新 1
只是Eric的提示,感谢他分享解决方案和测试结果。
解决方案
首先,删除所有项目依赖,然后重新添加,之后,问题就解决了。这可能是这个项目的一个问题,因为它是从旧的 VS2010.
迁移而来的
我遇到了同样的问题。我能够在 Visual Studio 中构建我的解决方案。但是当使用 MSBuild 在 Azure DevOps Pipelines 上构建它时,它以错误的顺序构建它们;我的 WiX .wixproj
项目是在其依赖项之一之前构建的。
我的 .sln
文件如下所示:
我为解决问题所做的是手动向该文件添加更多依赖项:
所以我的建议是查看您的 .sln
文件并添加您认为有意义的其他依赖项。
我的解决方案结构是这样的:
- WiX 安装程序:取决于项目 A 和 B
- 项目 A:取决于项目 B
- 项目 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
知道是什么导致了这个问题吗?
通常,构建顺序保存在解决方案文件(.sln
文件)中是这样的:
因此,当您使用它时,您应该使用该文件构建整个解决方案。但是
但是,在vs IDE中,构建单个项目时,可以按照指定的构建顺序,但是在msbuild命令行中,msbuild projectA.xxproj
不会先构建B再根据指定的依赖构建A。这也是 vs ides 独有的,尽管构建依赖项存储在 xxx.sln
而不是单独的 xxx.proj
文件中。
除非整个解决方案(msbuild xxx.sln
)在MSBuild命令行中构建,否则将按顺序构建。
这种情况通常会导致这种差异。
But for some reason when i try to rebuild the whole solution thats not the order in which Visual Studio actually tries to build the projects.
我想知道你做了什么导致了这个,如果你构建整个解决方案(xxx.sln
文件),这个问题就不会发生。所以我想知道哪种构建格式或您对解决方案做了什么。
由于 MSBuild 无法构建wixproj
文件,因此您应该使用VS IDE 或devenv xxx.sln /build 来构建整个解决方案。
建议
作为建议,您可以使用 项目参考 来指定构建顺序,这将在每个 xxx.proj
而不是 xxx.sln
文件中设置顺序。这样会更可靠和安全。
1) 删除 Project Dependencies 下的构建命令(右键单击解决方案)
2)右击WIX项目-->References
-->Add Reference
- ->Projects
-->Select Project A
和 Project B
.
3)右击项目A-->References
-->Add Reference
-->Project
--> Project B
.
此外,如果它对您没有帮助,请与我们分享导致此问题的原因以及导致该问题的任何步骤,以便帮助我们解决您的问题问题更快。
更新 1
只是Eric的提示,感谢他分享解决方案和测试结果。
解决方案
首先,删除所有项目依赖,然后重新添加,之后,问题就解决了。这可能是这个项目的一个问题,因为它是从旧的 VS2010.
迁移而来的我遇到了同样的问题。我能够在 Visual Studio 中构建我的解决方案。但是当使用 MSBuild 在 Azure DevOps Pipelines 上构建它时,它以错误的顺序构建它们;我的 WiX .wixproj
项目是在其依赖项之一之前构建的。
我的 .sln
文件如下所示:
我为解决问题所做的是手动向该文件添加更多依赖项:
所以我的建议是查看您的 .sln
文件并添加您认为有意义的其他依赖项。