GitHub Actions构建VC++项目失败:Microsoft.Cpp.Default.props缺失及子文件夹未克隆问题求助
解决GitHub Actions中VC++项目构建失败(MSB4019)的问题
从你贴的错误日志来看,核心问题其实出在两个地方:你的解决方案包含VC++项目(.vcxproj),但GitHub Actions的windows-2022 runner默认没装必要的C构建工具;而且你用了dotnet build命令,这个命令本来是针对.NET项目设计的,没法正确处理VC项目的依赖和构建流程。另外你怀疑子模块没克隆,咱们也可以一起验证确认。
下面是具体的修复步骤:
1. 安装Visual Studio C++构建工具
GitHub Actions的Windows runner默认只带了基础环境,没有预装VC构建组件。你需要在工作流里添加步骤来配置MSBuild环境,推荐用官方的microsoft/setup-msbuild action,它会自动找到并配置系统中的MSBuild,同时确保C相关的构建依赖可用:
- name: Setup MSBuild Environment uses: microsoft/setup-msbuild@v1.1
2. 替换dotnet build为MSBuild命令
dotnet build无法识别VC++项目的配置,你需要改用MSBuild来构建整个解决方案,同时指定好构建配置和平台:
- name: Build Entire Solution run: msbuild ${{ env.SOLUTION_FILE_PATH }} /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:Platform=x64
提示:如果你的项目是x86架构,把
Platform=x64改成Platform=x86就行,根据实际项目调整。
3. 验证子模块是否正确克隆
从错误日志里的路径(比如D:\a\genshin-cheat\genshin-cheat\cheat-base\cheat-base.vcxproj)来看,子模块其实已经被克隆了,但如果你还是想确认,可以在checkout步骤后加个验证命令:
- name: Verify Submodule Files run: | dir ${{ env.SOLUTION_FILE_PATH }}/../cheat-base dir ${{ env.SOLUTION_FILE_PATH }}/../cheat-library dir ${{ env.SOLUTION_FILE_PATH }}/../injector
这个命令会列出三个子文件夹的内容,直观确认文件是否存在。
4. 完整修复后的工作流
把以上步骤整合后,你的工作流应该是这样的:
push: branches: [ master ] pull_request: branches: [ master ] env: SOLUTION_FILE_PATH: ./genshincheat.sln BUILD_CONFIGURATION: Release permissions: contents: read jobs: build: runs-on: windows-2022 steps: - uses: actions/checkout@v2 with: submodules: true # 可选:验证子模块文件 - name: Verify Submodule Files run: | dir ${{ env.SOLUTION_FILE_PATH }}/../cheat-base dir ${{ env.SOLUTION_FILE_PATH }}/../cheat-library dir ${{ env.SOLUTION_FILE_PATH }}/../injector # 配置MSBuild环境 - name: Setup MSBuild Environment uses: microsoft/setup-msbuild@v1.1 # 用MSBuild构建解决方案 - name: Build Entire Solution run: msbuild ${{ env.SOLUTION_FILE_PATH }} /p:Configuration=${{ env.BUILD_CONFIGURATION }} /p:Platform=x64 # 如果有.NET项目的测试,保留这一步;如果全是VC++项目可以移除 - name: Run .NET Tests run: dotnet test
额外补充
- 你遇到的
MSB4019错误,本质是因为没装VC构建工具,导致MSBuild找不到C项目的默认属性文件,安装工具后这个问题会直接解决。 - NU1503警告是因为
dotnet restore试图处理VC项目,但VC项目本身不需要NuGet restore(除非你手动配置了),改用MSBuild后这个警告就会消失,因为MSBuild会自动处理VC++项目的依赖。
内容的提问来源于stack exchange,提问作者Legend_recalls
相关产品推荐
相关产品推荐

