Вставить зависимости Nuget в другой nuget с PrivateAssets - PullRequest
1 голос
/ 23 апреля 2020

У меня есть пакет слепков 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...