制作的 dotnet tool 运行失败提示依赖缺失
时间:2022-07-22
本文章向大家介绍制作的 dotnet tool 运行失败提示依赖缺失,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
小伙伴做了一个很好用的 dotnet tool 工具,但是这个工具仅在他的设备上能运行,在我的设备上运行就会退出提示 An assembly specified in the application dependencies manifest (LindexiDoubi.deps.json) was not found 找不到依赖
默认选择 dotnet tool 的 NuGet 包是会带上所有依赖的,和其他的 NuGet 库不相同
但是在系统日志里面看到下面代码
Description: A .NET Core application failed.
Application: Lindexi.exe
Path: C:Userslinde.dotnettoolsLindexi.exe
Message: Error:
An assembly specified in the application dependencies manifest (LindexiDoubi.deps.json) was not found:
package: 'System.Globalization.Extensions', version: '4.3.0'
path: 'runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll'
也就是存在几个 dll 没有被带上,在看到小伙伴的 csproj 的库引用可以找到下面代码
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<RootNamespace>LindexiDoubi</RootNamespace>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>LindexiDoubi</PackageId>
<PackAsTool>true</PackAsTool>
<ToolCommandName>Lindexi</ToolCommandName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Walterlv.Themes.FluentDesign" Version="5.6.0" />
<PackageReference Include="Walterlv.Windows.Framework" Version="5.6.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.0.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.6.0" PrivateAssets="all" />
<PackageReference Include="System.Globalization.Extensions" Version="4.3.0" />
</ItemGroup>
</Project>
其实坑就是 Microsoft.CodeAnalysis.Analyzers
这几个库,因为这几个库被设置 PrivateAssets="all"
因此打包的时候会忽略这些库的 dll 因此找不到依赖
解决方法就是去掉 dotnet tool 项目的库的 PrivateAssets="all"
就可以
一开始以为是 WPF 项目不支持,实际上 WPF 项目也是可以作为 dotnet tool 包的
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/%E5%88%B6%E4%BD%9C%E7%9A%84-dotnet-tool-%E8%BF%90%E8%A1%8C%E5%A4%B1%E8%B4%A5%E6%8F%90%E7%A4%BA%E4%BE%9D%E8%B5%96%E7%BC%BA%E5%A4%B1.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
- Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)
- CodeSmith 创建Ado.Net自定义模版(四)
- TensorFlow图像分类教程
- Enterprise Library Policy Injection Application Block 之一: PIAB Overview
- Python教学——第七天
- 大数据将带来电视媒体生态式变革!大数据如何深度融合电视媒体?
- Silverlight SEO优化
- Silverlight性能优化
- WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
- WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
- 理性的相亲方法!精品课:《决策树》
- Asp.Net无刷新分页( jquery.pagination.js)
- 为什么网站需要用CDN来加速?
- Jmeter常用获取数据的几种方式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- tomcat调优 tomcat配置优化
- error: PyThreadState {aka struct _ts} has no member named exc_type
- Python创建目录文件夹
- python 按顺序读文件夹下面的文件
- python剪切文件
- 一个hashCode问题的追问,差点让我陷入无底洞
- 【JAVA基础&高级】 面向对象篇
- MySQL-InnoDb行格式与数据页结构 Krains 2020-08-08
- 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...
- MySQL索引 Krains 2020-08-09
- 「查缺补漏」巩固你的Redis知识体系
- MySQL事务 Krains 2020-08-09
- Linux本地提权漏洞复现与检测思路
- 内容安全策略( CSP )
- [译] 优化 React APP 的 10 种方法