发布 Nuget 包时有关 PackageReference 版本的最佳实践?
Best practice regarding PackageReference version when publishing Nuget packages?
发布 Nuget 包时指定 PackageReference 的最佳做法是什么?
根据https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files,指定版本号等同于 >= 那个版本。
例如,以下内容将引用 Newtonsoft.Json 的 11.0.1 或更高版本以及 RestSharp 的 106.9.0 或更高版本。
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
<PackageReference Include="RestSharp" Version="106.9.0" />
</ItemGroup>
如果另一个开发人员想在他的项目中使用我的 Nuget 包,则该开发人员可能在他的项目中也需要这些相同的包,他可能无法也不想使用我一直在使用的相同版本.因此,最佳做法是什么?我应该在发布时始终指定最低兼容版本,还是只更新我认为适合我的项目的包而不用担心发布的版本号?
从消费者的角度来说,是的,您应该指定最低兼容版本。这样,正如您提到的那样,您就不会强制您的包裹的消费者必须升级,例如他们的 Newtonsoft.Json
依赖性,如果它们恰好直接依赖于该软件包的版本 11.0.0
。如果出于某种原因您不允许使用版本 11.0.0
,那么您当然应该指定 11.0.1
.
例如,如果您知道 Newtonsoft.Json
版本 11.0.1
存在严重的安全漏洞,您可能希望强制执行已修补的新版本。但总的来说,我认为,作为一个包提供者,您会有兴趣为了消费者的缘故使您的包尽可能兼容。虽然,这并不意味着您不应该使包及其依赖项保持最新。
总有取舍。对于您无法控制的事情,您的库包参考版本可能会变得过时。例如,如果您没有要为您的库发布的新功能,但其中一个依赖库已更新,您可能不想更新您的 Nuget。也就是说,如果有一些重要的安全更新,您需要更新您的库。
略微无关,但 .NET Standard 中的旧建议之一可能对您做出决定有帮助。
When choosing a .NET Standard version to target, consider this trade-off:
- The higher the version, the more APIs are available to your library's code.
- The lower the version, the more apps and libraries can use your library.
个人,在使用Nuget包时,我尽量使用最新的依赖包,以确保我可以获得最新的功能,而不必担心安全漏洞。
发布 Nuget 包时指定 PackageReference 的最佳做法是什么?
根据https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files,指定版本号等同于 >= 那个版本。
例如,以下内容将引用 Newtonsoft.Json 的 11.0.1 或更高版本以及 RestSharp 的 106.9.0 或更高版本。
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" />
<PackageReference Include="RestSharp" Version="106.9.0" />
</ItemGroup>
如果另一个开发人员想在他的项目中使用我的 Nuget 包,则该开发人员可能在他的项目中也需要这些相同的包,他可能无法也不想使用我一直在使用的相同版本.因此,最佳做法是什么?我应该在发布时始终指定最低兼容版本,还是只更新我认为适合我的项目的包而不用担心发布的版本号?
从消费者的角度来说,是的,您应该指定最低兼容版本。这样,正如您提到的那样,您就不会强制您的包裹的消费者必须升级,例如他们的 Newtonsoft.Json
依赖性,如果它们恰好直接依赖于该软件包的版本 11.0.0
。如果出于某种原因您不允许使用版本 11.0.0
,那么您当然应该指定 11.0.1
.
例如,如果您知道 Newtonsoft.Json
版本 11.0.1
存在严重的安全漏洞,您可能希望强制执行已修补的新版本。但总的来说,我认为,作为一个包提供者,您会有兴趣为了消费者的缘故使您的包尽可能兼容。虽然,这并不意味着您不应该使包及其依赖项保持最新。
总有取舍。对于您无法控制的事情,您的库包参考版本可能会变得过时。例如,如果您没有要为您的库发布的新功能,但其中一个依赖库已更新,您可能不想更新您的 Nuget。也就是说,如果有一些重要的安全更新,您需要更新您的库。
略微无关,但 .NET Standard 中的旧建议之一可能对您做出决定有帮助。
When choosing a .NET Standard version to target, consider this trade-off:
- The higher the version, the more APIs are available to your library's code.
- The lower the version, the more apps and libraries can use your library.
个人,在使用Nuget包时,我尽量使用最新的依赖包,以确保我可以获得最新的功能,而不必担心安全漏洞。