C#: 我的第一个 Azure DevOps 管道("Hello, World!") - "The type or namespace name 'System' could not be found"
C#: 我的第一个 Azure DevOps 管道("Hello, World!") - "The type or namespace name 'System' could not be found"
我现在只想创建一个Azure DevOps的C#流水线,用于运行Helloworld.cs文件。
我按照Microsoft的知识库中的说明创建了一个Helloworld.cs和Helloworld.csproj文件。
Helloworld.cs文件内容如下:
using System; class HelloWorld { static void Main() { Console.WriteLine("Hello, World!"); } }
Helloworld.csproj文件内容如下:
我根据Microsoft的知识库中的建议,参考了“构建、测试和部署.NET Core应用程序”和“YAML模式参考”这两个链接,逐步创建了一个YAML文件。
当我尝试运行流水线时,编译器似乎对Helloworld.cs文件中的System命名空间声明出现了问题(这似乎很奇怪)。
以下是流水线的输出:
Helloworld.cs(1,7): error CS0246: 无法找到类型或命名空间名'System'(是否缺少using指令或程序集引用?) [d:\a\1\s\Helloworld.csproj] Helloworld.cs(3,7): error CS0518: 预定义类型'System.Object'未定义或导入[d:\a\1\s\Helloworld.csproj] Helloworld.cs(5,9): error CS0518: 预定义类型'System.Void'未定义或导入[d:\a\1\s\Helloworld.csproj] Build FAILED.
因此,在我尝试解决问题时,我找到了这个Stack Overflow的问题:“无法找到类型或命名空间名'System'”。
一些答案建议还原NuGet包。所以我按照Microsoft的NuGet(流水线)任务文档中的说明,将NuGet还原作为YAML中的第一个阶段添加进去。
以下是YAML文件的内容:
trigger:
- master
pool:
vmImage: 'windows-latest'
stages:
- stage: Restore_NuGet_Stage
displayName: '还原NuGet程序包阶段'
jobs:
- job: restore_nuget
displayName: '还原NuGet程序包'
steps:
- task: NuGetCommand@2
inputs:
command: restore
- stage: Build_Stage
displayName: '构建阶段'
jobs:
- job: compile_cs
displayName: '编译CS文件'
steps:
- task: DotNetCoreCLI@2
displayName: '构建任务'
inputs:
command: build
projects: 'Helloworld.csproj'
arguments: '--configuration Testing'
但是,我仍然得到了与上述相同的“无法找到命名空间名'System'”的错误。
我必须修复什么才能解决这个错误?我原以为只编译代码会是容易的部分...
编辑-以下是运行流水线时显示的初步输出。请注意,列出了“.Net Core版本2.158.1”和“SDK版本3.0.100”。
Starting: 构建任务
==============================================================================
Task : .NET Core
Description : 构建、测试、打包或发布一个dotnet应用程序,或运行自定义的dotnet命令
Version : 2.158.1
Author : Microsoft Corporation
Help : https://learn.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli
==============================================================================
C:\windows\system32\chcp.com 65001
Active code page: 65001
"C:\Program Files\dotnet\dotnet.exe" build d:\a\1\s\Helloworld.csproj --configuration Testing
Welcome to .NET Core 3.0!
---------------------
SDK Version: 3.0.100
问题原因:在旧的.NET框架项目中,没有告诉msbuild目标是什么,因此编译器不知道"System"在哪里。此外,构建dotnet core项目还需要指定Sdk属性。
解决方法:在.csproj文件中添加TargetFramework属性和Sdk属性,具体如下:
netcoreapp2.1
Exe netcoreapp3.0
注意,在根级别上有一个Sdk属性。此外,如果要构建.Net Framework项目,需要使用msbuild管道任务而不是dotnet cli任务。
参考链接:[https://learn.microsoft.com/en-us/dotnet/core/tools/csproj](https://learn.microsoft.com/en-us/dotnet/core/tools/csproj)
[https://learn.microsoft.com/en-us/visualstudio/msbuild/how-to-use-project-sdk?view=vs-2019](https://learn.microsoft.com/en-us/visualstudio/msbuild/how-to-use-project-sdk?view=vs-2019)
[https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/](https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/)
[https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/build/msbuild?view=azure-devops](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/build/msbuild?view=azure-devops)