开始使用.NET CORE

这篇博客来使用.net core编写一个简单的项目,包含一个类库项目,一个类库项目的测试项目以及一个使用了类库项目的控制台项目,然后演示如何在多项目的模式下来调试代码。我的本机是mac,开发环境是VS Code。由于.net core是跨平台的,所以使用windows下的VS CODE应该也是可以的。

#准备
开发环境的准备工作请参考https://www.microsoft.com/net/core

首先,新建一个名叫golden的文件夹作为该解决方案的根目录,然后再在下面新建两个文件夹,分别是src和test,然后在src下面新建两个文件夹分别为app和library,再在test文件夹下新建一个名为test-library的文件夹。
回到根目录(golden)下,新建一个globle.json文件作为我们的解决方案文件,类似.net framework项目的.sln文件,输入以下内容

{
    "projects": [
        "src",
        "test"
    ]
}

最终,目录的层次结构是这样的

/golden
|__global.json
|__/src
   |__/app
   |__/library
|__/test
   |__/test-library

#编写library
接下来编写一个名叫library的类库项目。将命令行工具定位到golden/src/library,然后输入dotnet new -t lib,这个命令创建了一个类库项目,包含project.json和Library.cs两个文件。
如果项目中需要用到别的组件(如Newtonsoft.Json),我们就在project.json中加入对Newtonsoft.Json的引用,修改后的project.json文件大概是这样的

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {},
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0",
        "Newtonsoft.Json": "9.0.1-beta1"
      }
    }
  }
}

这是执行dotnet restore命令,将组件下载到本地,并生成project.lock.json文件。
接下来将Library.cs删掉,并新建一个Thing.cs,代码如下:

using System;

namespace Library
{
    public class Thing
    {
        public int Get(int left, int right){
            return left + right;
        }
    }
}

本例中我们并没有使用Newtonsoft.Json组件。。。
输入dotnet build命令来编译我们的组件,完成后将会在golden/src/library/bin/Debug/netstandard1.6目录下生成一个library.dll文件。类库项目编写完毕。

#编写测试项目

在test/test-library下执行dotnet new -t xunittest命令。xunit.net是面向.net平台的一个比较主流的开源的单元测试框架。由于这个单元测试项目是针对library项目的单元测试项目,所以需要先引用library项目。又由于library项目在当前的解决方案中,所以我们不从NuGet获取而是从当前解决方案中获取,修改后的project.json文件如下:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {
    "System.Runtime.Serialization.Primitives": "4.1.1",
    "xunit": "2.1.0",
    "dotnet-test-xunit": "1.0.0-rc2-192208-24",
    "library": {
      "target": "project"
    }
  },
  "testRunner": "xunit",
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": [
        "dotnet5.4",
        "portable-net451+win8"
      ]
    }
  }
}

其中"library": {"target": "project"}的意思是,library组件从当前的解决方案中获取,而不从NuGet中获取。
然后删掉默认生成的Test.cs文件,新建LibraryTests.cs文件,代码如下:

using Xunit;
using Library;

namespace Tests
{
     public class LibraryTests
    {
        [Fact]
        public void TestThing() {
            Assert.Equal(42, new Thing().Get(19, 23));
        }
    }
}

接下来,运行dotnet restore来下载必要的组件,运行dotnet build编译代码,运行dotnet test测试代码。如果顺利的话,测试的输出结果大致如下:

xUnit.net .NET CLI test runner (64-bit osx.10.11-x64)                                                                                   
  Discovering: test-library                                                                                                             
  Discovered:  test-library                                                                                                             
  Starting:    test-library                                                                                                             
  Finished:    test-library                                                                                                             
=== TEST EXECUTION SUMMARY ===                                                                                                          
   test-library  Total: 1, Errors: 0, Failed: 0, Skipped: 0, Time: 0.211s                                                               
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.            

#编写控制台项目
在golden/src/app下运行dotnet new,该命令创建了一个控制台项目,包含两个文件分别是Program.cs和project.json,我们需要引用当前解决方案下的library类库项目,所以需要在dependencies下加入对library项目的引用,修改后的project.json大致如下

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {},
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0",
        "Newtonsoft.Json": "9.0.1-beta1"
      }
    }
  }
}

然后将Program.cs的代码修改为

using System;
using Library;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Thing thing=new Thing();
            int number = thing.Get(19,24);
            Console.WriteLine($"The answer is {number}");
        }
    }
}

运行dotnet run命令,如果顺利的话,会输出The answer is 43,说明我们的项目完成了。

#在VS Code中调试代码
在单项目的情况下,调试代码是很顺其自然的事情,跟在VisualStudio你中是一样一样的。但是现在我们的解决方案中包含了多个项目,我们就会发现VS Code无法调试了,会提示你进行设置。VSCode默认会在.vscode文件夹中生成两个文件launch.json和tasks.json。

在tasks.json文件夹需要加入一个option属性"options": {"cwd": "${workspaceRoot}/src/app"},修改后的tasks.json文件类似这样

{
	// See https://go.microsoft.com/fwlink/?LinkId=733558
	// for the documentation about the tasks.json format
	"version": "0.1.0",
	"command": "dotnet",
	"isShellCommand": true,
	"args": [],
	"tasks": [
		{
			"taskName": "build",
			"args": [ ],
			"isBuildCommand": true,
			"showOutput": "silent",
			"problemMatcher": "$msCompile"
		}
	],
	"options": {
		"cwd": "${workspaceRoot}/src/app"
	}
}

在launch.json中需要修改program属性的地址,由原来的"program": "${workspaceRoot}/bin/Debug/<target-framework>/<project-name.dll>",修改为"program": "${workspaceRoot}/src/app/bin/Debug/netcoreapp1.0/app.dll",,这个是我们的控制台项目输出的dll文件。接下来就可以调试了!

这个逼装到最后,给一个原文的链接吧https://docs.microsoft.com/zh-cn/dotnet/articles/core/tutorials/using-on-macos

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值