无法加载项目文件。缺少根元素

Posted

技术标签:

【中文标题】无法加载项目文件。缺少根元素【英文标题】:The project file could not be loaded. Root element is missing 【发布时间】:2019-12-24 17:25:36 【问题描述】:

我正在尝试在 Jenkins 中使用VS Build tools 2017 构建一个 dotnet 3.5 项目解决方案文件。该项目使用 DotNet 3.5 的 MSBuild 编译得很好,但是当我尝试使用 MSBuild Engine Version 15.9.21+g9802d43bc3 进行相同的活动时,它正在抛出 MSBUILD : error MSB4025: The project file could not be loaded. Root element is missing

这是我用来编译 dotnet 3.5 项目的命令。

cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin"
MSBuild.exe "%WORKSPACE%\WBR.sln" /p:Configuration=Debug /p:DeployOnBuild=True /p:AllowUntrustedCertificate=True /p:CreatePackageOnPublish=True

请在下面找到 Jenkins 执行日志

C:\Users\Netadmin\.jenkins\jobs\FCRS\jobs\FCRS_VS\workspace>cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin" 

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin>MSBuild.exe "C:\Users\Netadmin\.jenkins\jobs\FCRS\jobs\FCRS_VS\workspace\WBR.sln" /p:Configuration=Debug /p:DeployOnBuild=True /p:AllowUntrustedCertificate=True /p:CreatePackageOnPublish=True 
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Build started 8/19/2019 6:38:12 PM.
MSBUILD : error MSB4025: The project file could not be loaded. Root element is missing.

Build FAILED.

  MSBUILD : error MSB4025: The project file could not be loaded. Root element is missing.

    0 Warning(s)
    1 Error(s)

下图是我的詹金斯工作区目录。

任何帮助都会很棒。

【问题讨论】:

看起来这个项目必须从 vs2010 迁移到 vs17 如果这必须工作。如果有人能证实这一点,那就太好了。 据我所知,有几种可能会导致这种错误。但现在我无法确定它属于哪种情况。您可以尝试使用较旧的 msbuild 版本,路径为:C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe,或者您可以在配置构建工具包时检查是否安装了相应的 C# 工作负载。 嗨@LanceLi-MSFT。如问题中所述,3.5 的 msbuild 成功编译代码,但 vs17 的 msbuild 因上述错误而失败。注意:这是一个 3.5 项目。你能告诉我哪些工作负载适合这种情况吗?我会检查它们是否存在于我的系统中。 昨天还没来得及测试build tools 2017能否很好的构建.net 3.5项目,今天测试后,我认为在正常情况下(典型的.net控制台、wpf、web应用) ,无需迁移它们。由于您尝试在命令行中构建它们而不是通过 vs 加载它们。 但我正在从命令行使用 vs17 的构建工具。 @LanceLi-MSFT 【参考方案1】:

当您使用命令msbuild xx.sln 时,您实际上是在构建属于该解决方案的项目。

根据您的错误消息:项目的项目文件之一 (xx.csproj) 未加载导致 msbuild 无法很好地读取 xml 内容。你可以试试:

1.打开xx.csproj文件,确认其格式为:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
</Project>

2.用UTF-8 encoding保存,避免BOM乱码

3.备份然后删除.suo和.csproj.user文件

4.否则,由于是asp.net mvc项目,你可以通过vs2017创建一个同名的asp.net mvc项目,将所有源文件复制到新项目中,将项目迁移到VS2017

5.确保您的构建工具包安装了 Web 开发工作负载:

6. 由于从 .net3.5 使用 msbuild 时效果很好,因此您可以在服务器中安装 .net framework 3.5,并在构建 .net 3.5 项目时尝试从 C:\Windows\Microsoft.NET\Framework64\v3.5 而不是 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin 调用 msbuild vs2010.

【讨论】:

嗨@Lance,我想用sonarqube分析dotnet项目。问题是 sonarscanner 与 vs15 或 vs17 的 msbuild 兼容。 @KrisT 你试过 1.2.3 吗?如果不行,可以新建一个vs2017空项目,将vs2010项目迁移到vs2017(这样总是行)。或者您可能需要分享 xx.csproj 的内容,以便我们更深入地检查问题的原因。 @KrisT 嗨,问题仍然存在吗? 我已经要求开发者分享项目文件。但我有一个疑问。正如您在图片中看到的,此解决方案文件中有 5-6 个模块。我应该工作并显示所有项目文件吗? 这是peoject文件,不是上面脚本中的解决方案文件。我只是想检查一下格式,所以propertygroup和itemgroup中的细节可以忽略。

以上是关于无法加载项目文件。缺少根元素的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot 和 Gradle 多模块项目,无法正确加载依赖项

Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法

错误: 找不到或无法加载主类

VS2019安装sharp7-full-1.0.0出现缺少根元素?

错误“模块根文件夹中缺少文件 google-services.json。没有它,Google 服务插件无法运行”[重复]

无法加载程序集...确保它被启动项目引用