让我们考虑一个场景,在该场景中,我们要公开两个.NET Standard项目并为其创建NuGet包:
图书馆解决方案
ClassLibrary1(CL1)
∟ClassLibrary2(CL2)
重要的是要提到CL1与CL2具有ProjectReference。
NuGet的文档指出,理想情况下,我们应该使用一个程序集生成一个包,因此我们为每个包创建一个NuGet包。
当我们需要在LibrarySolution的范围内确定CL1中需要哪个版本的CL2时,就会出现问题,因为我们有直接的项目参考。
我想到以下两种方法:
在解决方案中维护项目引用,这意味着我们需要将程序包版本存储在csproj文件中,提交版本更改等,以便版本约束和依赖性要求正确(我们目前在CI管道和当前版本中处理版本控制)版本存储在此处而不是代码中)。
将对CL2的依赖关系转换为PackageReference。这样,CL1将始终依赖于已发布的CL2版本。但是,这样做将意味着围绕发布和更新NuGet软件包(批准PR,合并,CI等)进行所有操作,这可能会非常耗时。
我认为选项1更好,但还是有点手动。是否有解决此问题的最佳方法?我宁愿不要使用包来引用位于相同解决方案内部的项目,因为这会导致不必要的间接访问。
参考方案
首先,使用ProjectReference
可以正确执行操作。同一解决方案中的两个项目甚至没有理由知道另一个软件包的存在。
现在,由于您在同一解决方案中拥有CL1和CL2,我想CL1需要CL2的最新版本。
考虑到前一个因素,您只需添加以下内容即可生成构建包:<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
标签,MSBuild会将其更改为对包中最新版本的NuGet依赖项。
最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…
当我运行python代码时,它说“ <<目前是意外情况” - python基本上,这是我们合作者的python代码,用于生成网格,该网格是在Linux环境下开发的。我使用Cygwin在Windows上运行此代码。麻烦部分如下。 BiV_temp.geo也是一个python脚本。因此,命令是用预定义的数字和文件名替换脚本BiV_temp.geo中的字符串。os.system('cp BiV_fiber.geo BiV_te…
LeetCode题解拼凑硬币小Q十分富有,拥有非常多的硬币,小Q拥有的硬币是有规律的,对于所有的非负整数K,小Q恰好各有两个面值为2^k的硬币,所有小Q拥有的硬币就是1,1,2,2,4,4,8,8.....小Q有一天去商店购买东西需要支付n元钱,小Q想知道有多少种方案从他拥有的硬币中选取一些拼凑起来恰好是n元(如果两种方案某个面值的硬币选取的个数不一样就考虑为不一样的方案)输入:输入包…
Python lmfit约束:a <b <c - python我在Python中使用lmfit来拟合一些数据,其中包括拟合变量a,b和c。我需要确保a <b <c。我发现http://cars9.uchicago.edu/software/python/lmfit_MinimizerResult/constraints.html谈到需要定义为不等式和设置虚拟变量的约束。例如,如果我想要a + b <=…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制