- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
。
很多公司中架构师会搭建一个统一的项目基础架构模板,然后全部新项目都会拿这个基础架构来开发新的项目,那架构中就会有很多的中间件,比喻公司内部的封装好的Redis中间件,访问数据库的中间件,MQ中间件,小程序中间件等等.
现在很多项目都用这个模板开发了,然后其中一个中间件有问题了或要加功能,那么全部项目都要把这个中间件修改一遍。可能不同项目在不同的组不同的负责人,通知起来也麻烦。这时候就可以把这些中间件做成一个NuGet包了,然后全部项目都可以通过NuGet包安装,有更新就更新NuGet包,各个项目更新NuGet包就行了。但这些NuGet包不能上传到公开的NuGet服务器上,因为这些NugGet包只能公司内部用的,为了安全性考虑,就需要搭建自己的私有NuGet服务了.
。
Nexus:支持NuGet,有点重.
MyGet:Nuget云服务,不适合企业内私有部署.
BaGet:简单易用,但还没有实现身份认证,上传的包谁都能Down下来,界面也不需要登录就能访问,因为安全原因只能放弃.
ProGet:商业软件,支持nuget、npm、docker等,但它是.NET生态应用,而且还提供了免费版本,身份认证、权限方面控的很好,功能也多.
这里各种对比下选用ProGet 用Docker方式搭建一个内部的NuGet服务器.
创建网络 。
这里是创建一个和SQL Server共同的网络,如果已经装有SQL Server了,则不需要这步 。
docker network create inedo
。
。
。
创建一个SQL Server 。
如果有SQLServer数据库,跳过这一步。文档里只说了需要SQL Server,是否兼容其它数据库还没尝试,旧版本的时候是可以用PgSQL的.
# docker 部署免费版本sqlserver docker run --name inedo- sql \ -v /etc/localtime:/etc/ localtime:ro \ -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD= sa123456' \ -e 'MSSQL_PID=Express' --net=inedo --restart=unless- stopped \ -d mcr.microsoft.com/mssql/server:2019-latest
-v /etc/localtime:/etc/
localtime:ro:让容器用本机的日期
。
创建一个名叫ProGet的数据库,为了避免问题,请确保将其排序规则指定为SQL_Latin1_General_CP1_CI_as 。
# sqlserver 创建一个数据库ProGet docker exec -it inedo-sql /opt/mssql-tools/bin/ sqlcmd \ -S localhost -U SA - P 'sa123456' \ -Q 'CREATE DATABASE [ProGet] COLLATE SQL_Latin1_General_CP1_CI_AS'
。
启动ProGet容器 。
先创建一个文件夹挂载上传的包,这里创建在 。
# 创建目录挂载上传的包 mkdir -p /home/proget/packages
。
启动ProGet容器 。
# 启动ProGet容器 docker run -d --name=inedo --restart=unless- stopped \ -v /etc/localtime:/etc/ localtime:ro \ -v /home/proget/packages:/var/proget/packages -p 8180:80 --net= inedo \ -e SQL_CONNECTION_STRING='Data Source=inedo-sql; Initial Catalog=ProGet; User ID=sa; Password= sa123456' \ proget.inedo.com /productimages/inedo/proget:latest
SQL_CONNECTION_STRING:SQL Server数据库连接字符串
。
。
这时候打开ip:8180端口,就能成功访问NuGet服务器界面了.
设置ProGet包括创建源,设置用户,设置用户组,设置功能权限.
上面部署好后这里还需要一个license key 。
。
。
。
。
。
这时ProGet也会帮把 License Key信息保存到部署的站点里面了,不需要再把key填一次了.
。
然后登录 。
。
。
。
。
。
修改完密码设置权限 。
。
。
。
创建api key 。
。
设置权限 。
。
。
。
修改完后,想查看NuGet服务器上的包就需要登录了.
创建源 。
要上传Nuget包,需要创建一个源,就是Nuget包的源,ProGet能够创建多个源,分别存不同的包 。
。
选源的种类为NuGet 。
。
。
。
。
visual studio 建一个类库,这里为了演示只写一个帮助类.
。
右键属性填写包的信息 。
。
项目右键,加包.
。
打包成功后会在bin/debug下生成一个nuget包 。
。
把NuGet包推送到NuGet服务的源上 。
# nuget包推送命令 dotnet nuget push wxl.tool.1.0.0.nupkg --api-key c39bf1f00893dc07123508d281305e9735xxxxxx --source http://1.15.63.120:8180/nuget/mynuget/v3/index.json
--api-key:上面创建的用于推送的apikey 。
--source :上面创建的源feed 。
推送完成就可以在NuGet服务器上在到这个包了,这里的时间比服务器少了一个时区8小时,是因为容器时区问题,在启动Docker时加上-v /etc/localtime:/etc/localtime:ro即可解决,前面的启动命令已经加上了.
。
visual studio 另起一个项目,然后右键打开Nuget管理,把NugGet的源添加进去 。
。
。
。
输入账号信息后就能安装啦。上面3.2的方式能通过vs来添加源和NuGet包了,那有什么问题呢?
1、每个开发人员都要在自己的vs添加一遍这个NuGet源.
2、(重点)发布到服务器之后,服务器识别不到NuGet源,需要在服务器设置一下NuGet源,如果服务器很多的情况,添加修改起来会比较麻烦.
这时就可以用NuGet.config的方式来添加源了.
在项目根目录添加NuGet.config文件,内容为 。
。
。
。
。
这样打开项目后,项目会自动从nuget.config加载nuget的源,就不需要从vs添加了。发布的时候项目也能从nuget.config还原所需的NuGet包,就不需要每个服务器设置NuGet源了.
到这里Nuget私有服务使用就完成了! 。
。
NuGet发布包命令地址:https://learn.microsoft.com/zh-cn/nuget/nuget-org/publish-a-package?source=recommendations 。
NuGet.confg微软官方文档地址:https://learn.microsoft.com/zh-cn/nuget/reference/nuget-config-file?cid=kerryherger 。
ProGet官网地址:https://proget.inedo.com/ 。
最后此篇关于NuGet私有服务器ProGetDocker搭建和公司中实战用法的文章就讲到这里了,如果你想了解更多关于NuGet私有服务器ProGetDocker搭建和公司中实战用法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如果需要在类外访问静态(例如单例),可以选择公共(public)静态而不是私有(private)静态,而当不需要公开函数时首选私有(private)静态(否则未命名的命名空间就可以了)——在这种情况下
在互联网上进行了一些搜索,但找不到简单的答案。我的问题集是在 Android 框架中使用 Java,但我相信这也是标准的 Java 行为。我理解 final 和 private 的定义,它们都用于变量
我有这个代码: public final class Board { private final int[][] blocks; private final int N; pr
对我来说,过去作为 Objective-C 开发人员很简单。一个类需要公开的每个字段都是一个属性,每个私有(private)字段都是一个没有 getter 或 setter 的实例变量。但我经常看到人
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个在 Docker 容器中运行的应用程序。它需要来自公司私有(private) NPM 注册表(Sinopia)的一些私有(private)模块,并且访问这些需要用户身份验证。 Dockerfi
我试图理解 C# 使用 getters 和 setters 自动声明变量与 java 声明之间的区别。 在java中我通常这样做: private int test; public int getTe
我在 Azure 中创建了 VNET。我放入了一个子集 Azure Private Link,它在 VNET 之外和另一台虚拟机中调用 Azure Function。 当我尝试通过专用 IP 调用专用
我在 Azure 中创建了 VNET。我放入了一个子集 Azure Private Link,它在 VNET 之外和另一台虚拟机中调用 Azure Function。 当我尝试通过专用 IP 调用专用
我目前正在使用 Objective-C(适用于 iPhone)构建游戏。 为此,出于性能/复杂性原因,我略微打破了 MVC,并为 View (渲染器)提供了对模型的直接引用。这是因为它应该以 60fp
我已经在 ubuntu 上成功配置了 2 个虚拟主机站点(基于名称的虚拟主机)。我的 apache 版本是 2.2.22。 这两个站点都在本地主机上工作。 /etc/hosts 条目 127.0.0.
考虑下面的类 public class A { private final Map cache; public HeavyObject getThing(); } 假设不能泄漏对缓存
我有一个类,它有一个方法,我希望它只能被它的子对象访问,而不能被这个包中的其他类访问。 Modifier | Class | Package | Subclass | World ———————
本文实例讲述了JavaScript中的公有、私有、特权和静态成员用法。分享给大家供大家参考。具体分析如下: 下面的内容是在《JavaScript.DOM高级程序设计》里面摘抄出来的,比较容易理解,
我有一个用例,我已将其简化为以下程序: public class A { private int x = 100; class B { private int y = ne
问题: 类声明如下: class Select { public: template static Iterator function(Iterator , Iterator , bo
我是一名初级 PHP 程序员。我还有很多东西要学。这就是我问这个问题的原因。在一个类中,您有一个公共(public)函数,您可以从该类外部调用它。有时你有一个私有(private)函数,你可以在私有(
问题是: 何时使用私有(private)函数,何时使用嵌套函数? (我在问 F# 但也许答案可能与其他功能语言相关) 一个小例子 namespace SomeName module BinaryRea
我发现工作表中仍然可以使用私有(private)函数。它们是隐藏的,但如果用户输入他们的名字,他们就会被调用。为什么?它应该以这种方式工作吗?有没有办法完全阻止用户定义的函数在 VBA 项目之外使用?
所以我最近开始尝试使用 Kotlin,我偶然发现了这个: If a top-level declaration is marked private, it is private to the pack
我是一名优秀的程序员,十分优秀!