在开发 dotnet tool 时,我将规范编码的库作为 dotnet tool 发布,但是在发布的时候本地进行安装提示DotnetToolReference 项目类型仅可包含 DotnetTool 类 型的引用
因为我的库本身也是作为可被引用的项目库发布的,在发布的时候我选择的库是多个平台的。多个平台的框架的写法请看 让一个 csproj 项目指定多个开发框架 - walterlv
但是这样写的多框架的包如果作为 dotnet tool 发布,那么将会在安装的时候有下面代码提示
英文版本请看下面
从 dotnet 手工打一个 dotnet tool 包 可以知道一个工具包需要在 nuspec 文件里面包含下面代码
而在压缩包里面存在 Tools 文件夹,而这个文件夹里面有一个 DotnetToolSettings.xml 文件,如果这个要求不满足,那么在 dotnet core 3.1 的版本将安装失败
也就是调试方法是打开打包出来的 NuGet 包,因为本质 NuGet 包就是压缩文件,解压缩,然后看看是否不符合上面两个点,如果不符合那就是本文说的原因了
解决方法是将 csproj 设置为单框架项目,要求这是一个 dotnet core 框架,然后设置 PackAsTool 和 ToolCommandName 属性,详细请看 dotnet 用 NuGet 将自己的工具作为 dotnet tool 分发
如果我的库同时也是作为依赖库,显然这个方法是不成的,我找了很久没有找到在一个 csproj 里面能做出来的解决方法。但是我可以重新创建一个 csproj 文件,让这个 csproj 文件负责打包工具包。这个还请小伙伴看我的源代码,我原本的文件是 EncodingNormalior.csproj 文件,然后我将这个文件修改为 SDK Style 的格式,修改后请看 EncodingNormalior.csproj 但是这个源代码存在一个问题是需要作为 dotnet framework 4.6.1 的库。这和 dotnet tool 冲突
于是我在相同文件夹再创建一个 dotnetCampus.EncodingNormalior.csproj 就解决了
这个迁移的代码请看 添加自动打包 by lindexi · Pull Request #27 · dotnet-campus/EncodingNormalior
dotnet tool install of local tool fails due to NU1212 · Issue #9775 · dotnet/sdk
.NET Core Global Tools and Gotchas
dotnet 用 NuGet 将自己的工具作为 dotnet tool 分发
让一个 csproj 项目指定多个开发框架 - walterlv
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。