[英]If a nuget specifies PrivateAssets=all why specify IncludeAssets?
nuget 安装页面仅用于开发包(例如分析器、构建工具),通常显示如下:
<PackageReference Include="Foo" Version="1.2.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime;build;native;contentfiles;analyzers;...</IncludeAssets>
</PackageReference>
对于此类包, PrivateAssets
属性始终设置为all
。
也始终指定IncludeAssets
属性。 确定是多余的吗?
compile
资产没有在InlcudeAssets
中列出,所以实际上并不相同。 缺少compile
资产意味着如果 package 包含lib/
或ref/
下的任何 dll,您将无法调用这些 API,这是一件好事,因为 package 不会被列为您自己的依赖项package。
如果您删除该IncludeAssets
行并调用 API,那么使用您的 package 的任何人(并调用使用您的“privateassets = all” ZEFE90A8E604A7C840E88D03A67F6B7D8 引用的 API 将被抛出),然后在运行时抛出 FileNotFoundD8 引用。
因此,拥有一个删除compile
的IncludeAssets
行是一件好事,尽管可以通过将其替换为<ExcludeAssets>compile</ExcludeAssets>
来实现同样的效果,这样会更清晰。
我的直觉是runtime
也应该被排除在外,但我不知道为什么在执行此操作时在 NuGet 上工作的人做出了不同的决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.