我有一个类库a.dll,它依赖于“ newtonsoft.json.dll”和b.dll(它是一个单独的nuget包)。
我正在尝试为a.dll创建一个nuget包。为了使该程序包正常工作,需要b.dll。
当我在新项目中引用a.dll的软件包时,它将为b.dll添加一个nuget引用。我不希望那样发生。当我引用a.dll软件包时,不应强制安装nuget软件包b.dll。
有没有办法避免从我的软件包(a.dll)中使用b.dll。请注意,a.dll软件包需要b.dll才能起作用。
答案 0 :(得分:0)
要打包一个不包含您依赖的其他.dll的软件包,您将需要进行两次修改。
首先,您需要在属性中将对 Newtonsoft.Json 的引用标记为Copy Local False。
第二,您需要将 Newtonsoft.Json 设置为nuspec文件中的依赖项。
<dependencies>
<dependency id="Newtonsoft.Json" version="12.0.3" />
</dependencies>
这将允许Visual Studio在用户安装具有 a.dll 和 b的 a.nupkg 时从Nuget中显示和提取依赖项程序包。 dll 内部
这很容易,因为它为您完成了大部分工作,而您所需要的只是在项目中包含PackageReference行,并且dotnet pack
命令将知道这是一个外部依赖项
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\b.csproj" />
</ItemGroup>
</Project>
有关nuspec和项目文件PackageReference的更多信息,请参见https://docs.microsoft.com/en-gb/nuget/concepts/package-versioning#Constraining_Upgrades_To_Allowed_Versions
来自Microsoft的完整nuspec示例: https://github.com/microsoft/CRA/blob/3ffff95fbbd89a682d17c7dc8a6930164598a440/src/CRA.Worker/CRA.nuspec
来自Newtonsoft.Json https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Newtonsoft.Json.csproj
以外的其他人的ProjectReference示例更复杂但仍然很好。