废话后面再说,先将操作步骤贴出来。如果只想查看怎样添加本地包的引用,可以直接跳到第六步。
第一步,打开VS Code,使用快捷键“Ctrl + `”打开终端,或者在菜单栏的“查看”菜单中找到“集成终端”并点击。在打开的终端窗口中输入一下命令定位到保存程序的目录,并新建文件夹“LocalNupkgRefExample”,文件夹名称自己定义。如下图所示。
命令说明:
cd 参数:DOS命令,定位到参数中指定的文件夹
mkdir 参数:DOS命令,在当前目录创建文件夹,名称由参数指定。如果参数中指定了路径,那么会在指定的位置创建文件夹,例如 mkdir ../Test,会在上一级目录创建Test文文件夹。
为了方便管理文件,我们可以在VS Code中打开刚才创建的文件夹(“文件”菜单下的“打开文件夹”项),然后通过VS Code的资源管理器管理里面的文件,这里不再多说,这些操作自己可以向玩新手机一样自己尝试一下。
注意:本示例是用.Net Core 2.0做的,如果你的电脑上没有安装,请先下载并安装。
第二步,使用dotnet new命令添加一个空项目,命名为“LocalNupkgLib”,用来作为被引用的本地包(现在叫做“包”并不合适,因为这只是编写时管理程序的项目,还没有打包)。如下图所示。运行命令后会在当前目录“LocalNupkgRefExample”下创建一个文件夹“LocalNupkgLib”,并在里面创建名称为LocalNupkgLib的项目文件,以及一个名称为Class1的类文件。
命令说明:
dotnet new 模板 -n 名称:在使用.net core命令时需要使用dotnet命令提示符,new命令用于表明添加新文件, 模板用于指出文件类型,-n指示该文件名称由后面的参数“名称”指定。截图中模板为classlib,表示创建类库。如果不使用-n指定文件名称,会默认以当前文件夹的名称为文件名称。
可以使用 dotnet new或dotnet new -h或者dotnet new --help来查看new命令可以创建哪些文件类型。
第三步,在资源管理器中修改Class1的名称为MyClassLib(删除这个类文件再添加新的也可以),修改类名称为MyClassLib,并在里面添加一个属性Message,用于在其他项目中使用。
第四步,将刚才的项目打包。使用命令pack将项目打包到指定位置。
命令说明:
pack 项目名称 -o 目标位置:项目名称就是在之前创建的项目LocaNupkgLib.csproj的名称LocalNupkgLib,-o后面输入要将包放在哪个位置,如果不指明位置,默认会打包到要打包的项目的生成文件中,即Debug文件夹里面。这里为了便于其他项目引用,将位置放在了与该项目同级的文件夹LocalNupkgRefExample下。
如果打包时项目名称写上了扩展名,那么就需要在运行命令时写上项目目录,如下图所示,当前命令所在的目录是LocalNupkgRefExample,而项目文件LocakNupkgLib是在子文件夹LocalNupkgLib中,所以直接运行命令dotnet pack LocalNupkgLib.csproj -o ..\mypack就发生报错,提示找不到项目文件,而写上子文件夹后就可以正常打包了。
打包后可以在资源管理器中看到刚才生成的文件夹mypacks,里面包含一个包文件LocalNupkgLib.1.0.0.nupkg。
个人猜想在不写项目扩展名时,系统认为项目是在所提供的文件夹LocalNupkgLib中,会在这个文件夹中查找项目文件,名称不一样也没关系(这一点还没验证)。
如果需要了解详细的打包命令,可以使用dotnet pack -h来查看。
第五步,添加控制台项目,用于引用刚才生成的包。
使用命令dotnet new console -n LocalNupkgApp添加一个控制台项目。这一个和添加类库的命令类似,只是将classlib改为了console。其他不再做说明。
在资源管理器中展开LocalNupkgApp文件夹,可以看到里面有一个项目文件LocalNupkgApp.csproj。打开Program.cs类文件,我们在里面调用一下在上一个项目中添加的类库LocalNupkgLib中的方法。如下图所示。这里因为还没有引用打包好的包文件,所以不会有智能提示。
可以使用命令 dotnet new或者dotnet new -h来查看可以生成哪些类型的文件,命令中需要使用下图中短名称列中的内容来表示要生成的文件类型。
生成一下这个控制台项目,看看会发生什么。
使用命令dotnet build LocalNupkgApp后发生了报错,如下图所示:缺少引用。是不是和Visual Studio中发生的问题一样?接下来就是要解决这个引用的问题了。
第六步,在控制台项目中添加本地引用。
运行命令dotnet add LocalNupkgApp package LocalNupkgLib。运行后发生报错,提示找不到这个包。注意错误提示,是到一个网站上查找的,而不是本地我们指定的那个位置mypacks。
为了让系统知道从哪里找我们的包文件,我们需要修改一个控制台项目的项目文件LocalNupkgApp.csproj.
如下图所示,打开LocalNupkgApp.csproj文件,在PropertyGroup中添加元素<RestoreSources>..\mypacks</RestoreSources>,“..\mypacks”即是我们指定的包位置,因为mypacks文件夹位于控制台项目文件夹的上一级,所以需要使用“..”来确定相对路径。
如果需要设置多个包的位置,可以在RestoreSources元素中添加多个位置,多个位置之间用分号“;”分隔。例如<RestoreSources>C:\Users\sun\.nuget\packages; ..\mypacks; https://api.nuget.org/v3</RestoreSources>
再次运行包引用命令。可以看到已经没有报错,并且显示添加上了包。这时在查看LocalNupkgApp.csproj文件可以看到里面已经添加了一个元素<PackageReference>。当然这个元素我们也可以手动添加到项目文件中,而不用命令行。
如果我们要直接引用项目,而不是类库(包),那么使用命令dotnet add LocalNupkgApp reference LocalNupkgLib\LocalNupkgLib.csproj。这里省略项目路径和扩展名会报错,提示找不到项目。运行后系统会在项目文件的<ItemGroup>元素中添加一个项目引用:
第七步,重新生成项目。已经没有报错了。
第八步,运行项目。可以看到已经显示了我们添加的消息。
运行项目使用run命令,注意要添加-p用来指定项目名称。
到此,将本地类库添加到项目中已经结束。
文章中一些命令并没有做详细的解释,因为每一个命令都有多个参数,解释起来会占用很多时间,希望自己有时间可以把这些命令的使用方法以及技巧总结一下。
命令中有些参数可以直接写项目名称,而有些还需要填写项目的相对路径,这些区别也需要整理一下,并弄明白为什么有的可以直接写项目名称,而有的则还需要写路径。
因为在刚接触.net core 2.0,对里面的各种命令还不熟悉,遇到了添加本地类库的问题,在网上搜了很多文章都不准确,而且很多是针对.net core 1.0的,好不容易搜索到一篇文章有点眉目,加上自己的测试终于弄明白了。这里忘了文章的地址,刚才重新搜索了一下,没找到。。。暂时没法添加文章地址,对不住文章作者了。
因为本人也是刚接触.net core 2.0,而且没什么写博客的经验,内容有些散乱,希望能帮助大家,也希望.net core 2.0越发展越好,不要虎头蛇尾。