【问题标题】:Why is the project file not found even though I am using an MSBuild task?为什么即使我正在使用 MSBuild 任务也找不到项目文件?
【发布时间】:2020-12-11 06:57:20
【问题描述】:

我创建了一个 Azure Devops 构建管道,并尝试在 Bitbucket (git) 上构建我的 ASP.NET MVC 和 Angular 混合站点项目。

首先检查项目,然后 Nuget 恢复必要的包,但是,我无法构建 .NET!

我偶然发现了this post here,它基本上不建议使用 dotnet 构建任务,而是建议只使用 Visual Studio 构建或 MSBuild 任务。

不过,Nether 正在为我工​​作!

  • 我试过VS2017-win2016托管代理,没用。
  • 我尝试了 Windows 2019 托管代理,但没有成功。

我收到此错误:

Bobby.ProjectA\Bobby.ProjectA.csproj(713,3): Error MSB4019: The imported project "C:\Program Files\dotnet\sdk\5.0.100\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files\dotnet\sdk\5.0.100\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" is correct, and that the file exists on disk. 
Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1 

 Dotnet command failed with non-zero exit code on the following projects : D:\a\1\s\Bobby.ProjectA.Tests\Bobby.ProjectA.Tests.csproj,D:\a\1\s\Bobby.ProjectA\Bobby.ProjectA.csproj 
    D:\a\1\s\Bobby.ProjectA\BobbyProjectA\BobbyProjectA.sln.metaproj(0,0): Error MSB3202: The project file "D:\a\1\s\Bobby.ProjectA\BobbyProjectA\Bobby.ProjectA\Bobby.ProjectA.csproj" was not found. 
    D:\a\1\s\Bobby.ProjectA\BobbyProjectA\BobbyProjectA.sln.metaproj(0,0): Error MSB3202: The project file "D:\a\1\s\Bobby.ProjectA\BobbyProjectA\Bobby.ProjectA.Tests\Bobby.ProjectA.Tests.csproj" was not found. 
    Process 'msbuild.exe' exited with code '1'. 

由于 Ubuntu 更快,我也尝试过,但是,正如预期的那样,Visual Studio 构建任务失败,因为机器上没有安装 VS。 所以我尝试了 MSBuild,它在 Ubuntu 上运行良好,但是,仍然得到与找不到项目文件相同的错误。

Project "/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|Any CPU".
/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln.metaproj : error MSB3202: The project file "/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/Bobby.ProjectA/Bobby.ProjectA.csproj" was not found. [/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln]
/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln.metaproj : error MSB3202: The project file "/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/Bobby.ProjectA.Tests/Bobby.ProjectA.Tests.csproj" was not found. [/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln]
Done Building Project "/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln" (default targets) -- FAILED.

Build FAILED.

"/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln" (default target) (1) ->
(Build target) -> 
  /home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln.metaproj : error MSB3202: The project file "/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/Bobby.ProjectA/Bobby.ProjectA.csproj" was not found. [/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln]
  /home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln.metaproj : error MSB3202: The project file "/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/Bobby.ProjectA.Tests/Bobby.ProjectA.Tests.csproj" was not found. [/home/vsts/work/1/s/Bobby.ProjectA/BobbyProjectA/BobbyProjectA.sln]

我几乎用尽了我的搜索,但不知道如何解决这个问题。

以下是一些显示我的管道任务的屏幕截图:

我还认为 x64 架构可能与它有关,但这并没有解决问题。

我偶然发现了一些其他有趣的帖子,例如 this one,但我不确定在给出的答案中将项目添加到源代码控制意味着什么,考虑到我的 csproj 文件已经托管在存储库中并且正在被签出在任何任务运行之前。

我的项目结构和.sln路径(项目):

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29806.167
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bobby.ProjectA", "Bobby.ProjectA\Bobby.ProjectA.csproj", "{12345FE4-4CB9-3245-9A45-DB9A4AF1DFEB}"

【问题讨论】:

  • 嗨@Cataster。我对这个问题做了一些测试,得到了一些可能的原因。你可以检查下面的答案。如果没有帮助,您能否向我们展示您的 .sln 文件和项目结构的路径?
  • @KevinLu-MSFT 感谢 kevin 对此进行调查,我添加了我的项目结构和 .sln 路径,但是,根据您的回答,它们似乎已经是准确/相对的......

标签: msbuild azure-pipelines


【解决方案1】:

根据我的测试,当 错误的 csproj 文件路径映射到 .sln 文件时,我可以重现类似的问题。

您可以查看您的.sln file -> project field

例如:

文件结构

.csproj文件在WebApplication2文件夹下,所以项目相对路径为WebApplication2\WebApplication2.csproj

.sln 文件

VisualStudioVersion = 16.0.30611.23
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplication2", "WebApplication2\WebApplication2.csproj", "{497AD76F-222C-4BEB-BDCB-401B0E80B5CE}"
EndProject

更新:

与 Cataster 讨论后,导入项目问题可以通过在 Msbuild 任务中指定 **/*.csproj 来解决。

例如:

【讨论】:

  • 感谢 kevin 对此进行调查,我添加了我的项目结构和 .sln 路径,但是,根据您的回答,它们似乎已经是准确/相对的......所以我尝试的是指定 **/*.csproj而不是 **/*.sln 用于 MSBuild 任务中的 Project 字段,这解决了 Import Project 问题!但是现在我遇到了其他一些警告/问题warning MSB3245: Could not resolve this reference. Could not locate the assembly "System.IdentityModel.Services"
  • 好的,我能够通过使用 windows 2019 作为代理解决我在此处报告的第二个问题,但我希望使用 Ubuntu,因为它花费了 windows 2019 完成管道所需时间的 1/3构建。
  • 从错误信息看,nuget包好像没有恢复。您可以尝试使用 dotnet restore 任务并检查它在使用 ubuntu 代理时是否可以工作?另一方面,您可以检查 nuget restore 步骤并检查包是否已成功恢复。(例如Microsoft.IdentityModel)。
  • 嗨 Kevin,是的,为 MSBuild 任务中的 Project 字段指定 **/*.csproj 而不是 **/*.sln 解决了 Import Project 问题。
  • 嗨@Cataster 太棒了~很高兴知道你所有的问题都已经解决了。我已经更新了答案以添加这个关键点。祝你有美好的一天。
猜你喜欢
  • 2014-04-19
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2019-07-21
  • 2021-02-07
相关资源
最近更新 更多