DotNetCore跨平台~linux上还原自主nuget包需要注意的问题

时间:2022-09-08 17:57:55

问题的产生的背景

由于我们使用了jenkins进行部署(jenkins~集群分发功能和职责处理),而对于.net core项目来说又是跨平台的,所以对它的项目拉取,包的还原,项目的编译和项目的发布都是在一台linux的jenkins节点上进行的,而我们开发时是在windows系统,所以在进行还原和编译时出现了一些问题,今天的文章主要是解决这些问题的。

.net frameworks时代

我们在.net时代有包管理工具nuget,并且已经知道了它的好处,类似于nodejs的npm,帮助我们管理项目的依赖关系,升级和卸载都十分方便,它在.net项目里被存储到了解决方案下的packages目录,而在发布时,msbuild会根据这个目录去升级项目,如果这个packages里没有对象的包包依赖,就会从nuget源里进行下载,nuget全局源在windows系统里,一般存储在C:\\Users\\lind\\AppData\\Roaming\\NuGet\\NuGet.Config文件里,而本地系统也会有一个包包的缓存,一般会存储在C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\目录下面,这样在下次安装包的时候,就可以直接从本地进行安装了,官方nuget源的地址是https://api.nuget.org/v3/index.json,如果你自己去定义nuget服务器的话,也可以把它添加到nuget源里,直接修改C:\Users\lind\AppData\Roaming\NuGet\Nuget.Config文件就可以了,或者在vs的工具-选项里去添加它。

.net core时代

在进行跨平台的core时代后,我们的packages文件夹没有了,之前的包都被存储到了obj目录下面,而包的映射关系在obj\project.assets.json这个文件里,我们可以看到当前项目引用的包包,包包的源,包包的缓存等信息。

DotNetCore跨平台~linux上还原自主nuget包需要注意的问题

还原自主Nuget包需要注意的问题

  1. 你的nuget自主服务器需要被当前linux服务器访问到
  2. 需要在linux里建立一个全局的nuget.config文件,把自主源地址添加
  3. 把obj目录添加到源代码管理里
  4. dotnet restore还源项目,依赖包由obj\project.assets.json文件确定
  5. dotnet build编译项目里,需要有Roslyn文件夹的执行权限
  6. 最后才是成功发布

生成过程中的一些错误截图

自主依赖包找不到

DotNetCore跨平台~linux上还原自主nuget包需要注意的问题

没有对Roslyn的执行权限

DotNetCore跨平台~linux上还原自主nuget包需要注意的问题

最后,等待我们的才是成功!

成功得来不容!

希望通过我们的分享,可以帮到正遇到问题的您!

感谢各位阅读!