问题描述
我正在开发一个 .NET cli 工具。创建的 nuget 包包含一个 deps.json。此 deps.json 文件包含所有引用的 nuget 包的条目。
安装工具 dotnet tool install..
后,我无法运行工具 dotnet tool run
,因为缺少 deps.json 文件中列出的程序集
An assembly specified in the application dependencies manifest (xxxx.deps.json) was not found:
package: 'Microsoft.Win32.SystemEvents',version: '4.7.0'
path: 'runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll'
包包含一个 runtimes/win/lib/netcoreapp3.0
文件夹但不包含 Microsoft.Win32.SystemEvents.dll
问题似乎出在 deps.json 中 GitVersion.MsBuild
的条目。因为如果我删除此依赖项或删除 deps.json,应用程序将按预期工作。
- 为什么 deps.json 中包含开发依赖项
<PrivateAssets>all</PrivateAssets>
? - 如何从包中排除 deps.json,这是个好主意吗?
csprj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<PackAsTool>true</PackAsTool>
<IncludeBuildOutput>false</IncludeBuildOutput>
<PackageId>xxxxxxx</PackageId>
<ToolCommandName>xxxxx</ToolCommandName>
<PackageOutputPath>..\..\artifacts</PackageOutputPath>
</PropertyGroup>
<ItemGroup>
<packagereference Include="CommandLineParser" Version="2.8.0" />
<packagereference Include="GitVersion.MsBuild" Version="5.6.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</packagereference>
<packagereference Include="NuGet.ProjectModel" Version="5.8.1" />
</ItemGroup>
</Project>
deps.json 片段:
"GitVersion.MsBuild/5.6.6": {
"dependencies": {
"Microsoft.Build.Utilities.Core": "16.8.0"
}
},// snipp..
"Microsoft.Win32.SystemEvents/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0"
},"runtiMetargets": {
"runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win","assetType": "runtime","assemblyVersion": "4.0.2.0","fiLeversion": "4.700.19.56404"
}
}
}
解决方法
deps.json 包含所有开发依赖项,对 NET 工具没有意义。 解决方案是完全禁用 deps.json 文件的生成。
<GenerateDependencyFile>false</GenerateDependencyFile>