c# - 使用 PrivateAssets 将 Nuget 依赖项嵌入另一个 nuget
问题描述
我有一个 netstandard2.0 块包,它有一些依赖项:
<!-- Nugget Package dependencies -->
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2020.1.0" PrivateAssets="All" />
<PackageReference Include="Serilog" Version="2.9.0" PrivateAssets="All" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" PrivateAssets="All" />
<PackageReference Include="Newtonsoft.Json.Schema" Version="3.0.13" PrivateAssets="All" />
<PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" PrivateAssets="All" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" PrivateAssets="All" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" PrivateAssets="All" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" PrivateAssets="All" />
</ItemGroup>
每次我在另一个项目上安装这个包时,它都会添加它的依赖项,比如:
<ItemGroup>
<Reference Include="PackageXPTO, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\PackageXPTO.1.1.0\lib\netstandard2.0\PackageXPTO.dll</HintPath>
</Reference>
<Reference Include="JetBrains.Annotations, Version=2020.1.0.0, Culture=neutral, PublicKeyToken=1010a0d8d6380325, processorArchitecture=MSIL">
<HintPath>..\packages\PackageXPTO.1.1.0\lib\netstandard2.0\JetBrains.Annotations.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\PackageXPTO.1.1.0\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json.Schema, Version=3.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\PackageXPTO.1.1.0\lib\netstandard2.0\Newtonsoft.Json.Schema.dll</HintPath>
</Reference>
<Reference Include="Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\PackageXPTO.1.1.0\lib\netstandard2.0\Serilog.dll</HintPath>
</Reference>
<Reference Include="Serilog.Enrichers.Thread, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\PackageXPTO.1.1.0\lib\netstandard2.0\Serilog.Enrichers.Thread.dll</HintPath>
</Reference>
(...)
这弄乱了我已经依赖于Newtonsoft.Json的项目:旧的依赖关系现在将与块相关而不是直接依赖:所以,在未来,如果这个块不再依赖于 Newtonsoft.Json , 依赖会被移除,但是项目确实需要它。
包装配置:
<PropertyGroup>
<AssemblyName>PackageXPTO</AssemblyName>
<RootNamespace>PackageXPTO</RootNamespace>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>1.1.0</Version>
<SignAssembly>true</SignAssembly>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppxAutoIncrementPackageRevision>true</AppxAutoIncrementPackageRevision>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<LangVersion>7.2</LangVersion>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<TreatSpecificWarningsAsErrors />
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<TargetsForTfmSpecificBuildOutput>IncludeDependentDlls</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
已经尝试合并构建的 .dll 文件,但没有成功
<!-- Auto bundler - used to apply package reference dll files -->
<!-- Include all .dll files under build directory, excluding the self one (to avoid errors) -->
<Target Name="IncludeDependentDlls" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)\*.dll" Exclude="$(OutputPath)\$(AssemblyName).dll" />
</ItemGroup>
</Target>
解决方案
推荐阅读
- javascript - “if”语句不以请求的方式影响变量
- reactjs - React Hook useCallback 缺少依赖项:'dir'、'order'、'page'、'perPage' 和 'search'
- c++ - 如何在 CEF 中捕获按键?
- docker - Docker 公共集线器 - 图像内容完整性
- scala - Scala 选项:除非与 getOrElse 一起使用
- windows - Windows 应用商店是否防止恶意更改应用程序 DLL?
- sql - 基于 typeorm 中数组的 WHERE 条件
- google-apps-script - TypeError:找不到包含对象中的函数(Google App Script)
- shopify - 如何在 Shopify 的产品页面上添加指向不同色板的链接 + 将色板转换为图像?
- sql - 从 PostgreSQL 中的计数列中选择最大值