对于 .NET Framework 和 .NET 5 项目的解决方案,Azure DevOps 构建管道失败
Azure DevOps build pipeline fails for solution with .NET Framework and .NET 5 projects
我有一个 .NET 解决方案,过去只包含 .NET 5 应用程序。使用 Azure DevOps 上的 YAML 文件编译得很好。
但是,由于添加了一些 .NET Framework 4.8 项目,现在失败了。我读过一些似乎(在某种程度上)解释了问题的文章,但我不清楚解决方案。也许有人可以在这里为我拼写出来?
更详细...
项目
我有以下项目组合:
- 5 个 SDK 项目,net5.0(测试套件)
- 1 个 SDK 项目,netstandard 2.0(库)
- 1 个 SDK 项目,net5.0(Web API)
- 1 个 SDK 项目,net4.8(测试)
- 1 个非 SDK 项目,net4.8(Web API)
图书馆对所有人都是通用的。 .NET 4.8 WebAPI 由 .NET 4.8 测试套件引用,其他 .NET 5 测试套件引用 .NET 5 WebAPI.
我有以下 YAML 文件:
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildConfiguration: 'Release'
buildPlatform: 'Any CPU'
platform: x64
steps:
- task: NuGetCommand@2
displayName: 'Restore for all'
inputs:
restoreSolution: '$(solution)'
feedsToUse: 'select'
vstsFeed: '{Guid # 1}/{Guid # 2}'
- task: VSBuild@1
displayName: 'Build all'
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
maximumCpuCount: true
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: 'test'
projects: '**/*Test.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
我们在 Azure Artifacts 中有一个私人 NuGet 库,两个 Guid ({Guid # 1}/{Guid # 2}
) 允许我们访问它。
现在执行时,以下步骤似乎成功:Restore for all
和 Build all
。但是,似乎失败的步骤是 Run Tests
.
错误信息是:
##[error]Dotnet command failed with non-zero exit code on the following projects : D:\a\s\path\MySdkNet48.Test.csproj
这是 .NET 4.8 的测试项目,使用 SDK 项目文件格式。
在 Run Tests
步骤中深入了解更详细的细节,我看到:
D:\a\s\path\MyNonSdkNet48WebApi.csproj(328,3): error MSB4019: The imported project "C:\Program Files\dotnet\sdk.0.401\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files\dotnet\sdk.0.401\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" is correct, and that the file exists on disk.
##[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1
和
##[error]Dotnet command failed with non-zero exit code on the following projects : D:\a\s\path\MySdkNet48Test.csproj
如上所述,我不清楚如何解决这个问题...
由于 4.8 项目不是 Dotnet Core/5.0 项目,它需要 运行 使用 Visual Studio 测试任务。
将测试步骤拆分为 2 个单独的步骤,一个配置为 运行 4.8 项目,一个配置为 运行 dotnet core/5.0 项目。
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: 'test'
projects: '**/*Test.csproj;!**/*48.Test.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
- task: VSTest@2
displayName: 'VsTest - testAssemblies'
inputs:
testAssemblyVer2: |
**\*48.Test.dll
我有一个 .NET 解决方案,过去只包含 .NET 5 应用程序。使用 Azure DevOps 上的 YAML 文件编译得很好。
但是,由于添加了一些 .NET Framework 4.8 项目,现在失败了。我读过一些似乎(在某种程度上)解释了问题的文章,但我不清楚解决方案。也许有人可以在这里为我拼写出来?
更详细...
项目
我有以下项目组合:
- 5 个 SDK 项目,net5.0(测试套件)
- 1 个 SDK 项目,netstandard 2.0(库)
- 1 个 SDK 项目,net5.0(Web API)
- 1 个 SDK 项目,net4.8(测试)
- 1 个非 SDK 项目,net4.8(Web API)
图书馆对所有人都是通用的。 .NET 4.8 WebAPI 由 .NET 4.8 测试套件引用,其他 .NET 5 测试套件引用 .NET 5 WebAPI.
我有以下 YAML 文件:
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildConfiguration: 'Release'
buildPlatform: 'Any CPU'
platform: x64
steps:
- task: NuGetCommand@2
displayName: 'Restore for all'
inputs:
restoreSolution: '$(solution)'
feedsToUse: 'select'
vstsFeed: '{Guid # 1}/{Guid # 2}'
- task: VSBuild@1
displayName: 'Build all'
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
maximumCpuCount: true
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: 'test'
projects: '**/*Test.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
我们在 Azure Artifacts 中有一个私人 NuGet 库,两个 Guid ({Guid # 1}/{Guid # 2}
) 允许我们访问它。
现在执行时,以下步骤似乎成功:Restore for all
和 Build all
。但是,似乎失败的步骤是 Run Tests
.
错误信息是:
##[error]Dotnet command failed with non-zero exit code on the following projects : D:\a\s\path\MySdkNet48.Test.csproj
这是 .NET 4.8 的测试项目,使用 SDK 项目文件格式。
在 Run Tests
步骤中深入了解更详细的细节,我看到:
D:\a\s\path\MyNonSdkNet48WebApi.csproj(328,3): error MSB4019: The imported project "C:\Program Files\dotnet\sdk.0.401\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files\dotnet\sdk.0.401\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" is correct, and that the file exists on disk.
##[error]Error: The process 'C:\Program Files\dotnet\dotnet.exe' failed with exit code 1
和
##[error]Dotnet command failed with non-zero exit code on the following projects : D:\a\s\path\MySdkNet48Test.csproj
如上所述,我不清楚如何解决这个问题...
由于 4.8 项目不是 Dotnet Core/5.0 项目,它需要 运行 使用 Visual Studio 测试任务。
将测试步骤拆分为 2 个单独的步骤,一个配置为 运行 4.8 项目,一个配置为 运行 dotnet core/5.0 项目。
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: 'test'
projects: '**/*Test.csproj;!**/*48.Test.csproj'
arguments: '--configuration $(buildConfiguration) --collect "Code coverage"'
- task: VSTest@2
displayName: 'VsTest - testAssemblies'
inputs:
testAssemblyVer2: |
**\*48.Test.dll