【问题标题】:Core ASP.NET Project Azure Build Pipeline核心 ASP.NET 项目 Azure 构建管道
【发布时间】:2019-10-02 20:49:46
【问题描述】:

我有一个简单的解决方案,其中包含两个项目,我希望它通过 azure 构建管道。一个项目是纯类文件,它将构建一个 DLL,但该代码不是同一文件夹中的 GIT 存储库。另一个项目是 ASP.NET 项目,我已经在管道中进行了配置。当我尝试构建项目时,它给了我一个错误,如下所示:

MSBUILD : 错误 MSB1011: 指定要使用的项目或解决方案文件 因为此文件夹包含多个项目或解决方案文件。 [错误]Cmd.exe 以代码“1”退出。

Yaml 文件

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  name: 'buildserver'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

【问题讨论】:

  • 当您说您的 .dll 项目“不是同一文件夹中的 GIT 存储库”时,您是什么意思?这个项目和asp.net项目不在同一个git仓库?
  • folder1\solution-1 folder1\project-1 folder2\solution-2 folder2\project-2 folder2\project-1 => 指 project-1 所以现在这个解决方案有两个项目,但我想要构建服务器只运行一个
  • 你说你有configured [the asp.net] project in your pipeline。但是,您的 YAML 中没有任何内容表明应该构建的项目或解决方案文件(这是错误告诉您的内容)。如果您没有为dotnet build 指定项目或解决方案,它会使用当前目录自行查找。当此管道运行该任务时,您的当前目录位于 repo 的根目录。
  • 不清楚您所说的but that code is not the GIT repo in the same folder 是什么意思。也许您可以使用完整文件夹结构的屏幕截图或文本示例来编辑您的问题。

标签: asp.net build azure-devops azure-pipelines


【解决方案1】:

错误是要求您识别 .sln.csproj(或其他项目类型)文件 b/c dotnet 不知道您想要它做什么。

我倾向于在这类事情中使用变量,因为我经常在其他任务中使用解决方案名称。

示例:

trigger:
- master

pool:
  name: 'buildserver'

variables:
  buildConfiguration: 'Release'
  slnName: 'mySol'
  solution: 'some/dir/$(slnName).sln'

steps:
- script: dotnet build $(solution) --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

.csproj 示例:

存储库(和解决方案)结构如下:
(这是您问题中尚不清楚的部分)

myRepo
|--.git
|--src
   |--proj1
   |  |--proj1.csproj
   |
   |--proj2
   |  |--proj2.csproj
   |
   |--mySol.sln

您只需调用您希望管道构建的.csproj 文件。

trigger:
- master

pool:
  name: 'buildserver'

variables:
  buildConfiguration: 'Release'
  projName: 'proj1'
  project: 'src/$(projName)/$(projName).csproj'

steps:
- script: dotnet build $(project) --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

对于上述示例,您不需要指定 .sln.csproj,因为每个潜在的构建目标都位于其自己的目录中,如果您不指定,dotnet cli 将从 $pwd 搜索价值。因此,如果您的管道在 repo 的根目录中工作(默认行为),dotnet 应该首先找到 .sln 文件并构建它。

然而

如果您的目录结构如下所示,那么您需要指定:

myRepo
|--.git
|--src
   |--proj1.csproj
   |--class1.cs
   |--class2.cs
   |--proj2
   |  |--proj2.csproj
   |  |--class1.cs
   |
   |--mySol.sln

在上面dotnet不知道你是要构建mySol.sln还是proj1.csproj,所以指出要构建的文件应该可以解决你的问题,但我可能会建议你重组你的存储库。

如果proj2 不在myRepo 中安家

并且是 proj1 的依赖项,那么您将需要在管道中执行一些其他杂技(即:手动 git repo 克隆)来获取该项目及其需要的文件。如果是这种情况,我会强烈建议您将 proj2 视为一个完全独立的产品,并将其交付给依赖它的项目 (proj1) NuGet 或其他包交付方法。

【讨论】:

  • 我知道了,但我只有一个解决方案和两个项目该解决方案,我们如何提及我们的项目文件?
  • 不知道为什么你不想构建.sln,但如果你这样做,只需指定项目文件相对于你的存储库根目录的路径:variables: proj: 'some/dir/projDir/proj.csproj 并使用变量按照我的指示构建脚本。
猜你喜欢
  • 2020-08-03
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2019-05-11
相关资源
最近更新 更多