C#: 我的第一个 Azure DevOps 管道("Hello, World!") - "The type or namespace name 'System' could not be found"

13 浏览
0 Comments

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

0
0 Comments

问题原因:在旧的.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)

0