直接回答
1. 你能确认MyApp二进制文件应该放在NuGet包的tools文件夹中吗?
是的,建议将命令行二进制文件放入tools
文件夹中。
请参阅NuGet官方文档:如何创建NuGet包 - Microsoft Docs。对于tools
文件夹,它说:
可从程序包管理器控制台访问的PowerShell脚本和程序。
仅将tools文件夹添加到程序包管理器控制台的PATH环境变量中(特别是不要将其添加到构建项目时为MSBuild设置的路径)。
2. 无论我向MyApp添加什么依赖项(例如CommandLineArgumentsParser),它们都会显示为相关项目的引用/依赖项。 我希望它们不会出现 - 是否可以防止这种情况发生?
您应该添加PrivateAssets =“All”
以防止您的软件包依赖项转换为NuGet依赖项。
请参阅NuGet官方文档:NuGet PackageReference格式(项目文件中的软件包引用)| Microsoft Docs。只需将此代码添加到任何不希望被目标项目引用的依赖项中即可。
<PackageReference Include="CommandLineArgumentsParser" Version="3.0.18" PriavateAssets="All">
如果不希望将所有依赖项都转换为包依赖项,请将此行添加到所有
PackageReference
节点的末尾:
<PackageReference Update="@(PackageReference)" PrivateAssets="All" />
3.在MyApp二进制文件旁边的bin文件夹中有其他依赖的dll。将它们也包含在我的软件包中是否是一个好习惯?
NuGet不提供自动解决依赖项的能力,所以我们应该将我们的依赖项dll放入我们的tools文件夹中。如果您想知道如何添加依赖项,请阅读Nate McMaster的文章:MSBuild tasks with dependencies。
4.如果我将包X指定为MyPkg的依赖项,那么包X将被安装到依赖于MyPkg的项目中。是否可以以某种方式引用X的DLL,以便我不必将它们与MyApp一起打包?
这个问题与第2个回答相同,请遵循第2个回答。
附加参考资料
我写了一篇帖子来帮助我们使用NuGet打包命令行工具,但它不是英语。我很高兴今天把它翻译成英文,这样你就可以阅读学习了。
这是临时的Google翻译版本,我会尽快将其翻译成英文并在此发布。
这些是更多的文章,供您学习NuGet打包技巧。它们不直接回答您的问题,但它们仍然有用: