NuGet Пакет ссылок копирует локальную dll - PullRequest
0 голосов
/ 11 марта 2019

У меня есть требование установить для параметра Local Local значение false для библиотеки NuGet.До этого я использовал формат package.config и все работало нормально.После перехода на Формат справочного пакета я не могу найти способ сделать это.Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

1 голос
/ 11 марта 2019

Вы можете использовать PrivateAssets. Скопировано из документации

<ItemGroup>
    <!-- ... -->

    <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
        <PrivateAssets>all</PrivateAssets>
    </PackageReference>

    <!-- ... -->
</ItemGroup>

edit: на самом деле, вам может понадобиться использовать <ExcludeAssets>runtime</ExcludeAssets>.

0 голосов
/ 13 марта 2019

Я написал эту цель msbuild для взлома <packagereference ..><privateassets>all</privateassets>... или <privateassets>runtime;..., чтобы он действовал как старый <reference><private>true</private>... (скопируйте локальное свойство в ref, установленное в false).

Импортируйте указанную ниже цель в файл .csproj или файл Directory.Build.targets в корне решения.

<!--
***********************************************************************************************
RemovePrivatePackageReference.targets

  This is a hack to ensure privateassets = all is handled similar to reference 
  private=true (copy local false) even for legacy nugets. 

  Note that this hack is only intended to help legacy solutions where nugets owners hasn't 
  updated their packages. It is not intended as a long-term sustainable solution. 

                                                                      [Anders Laub // Laub+Co]
***********************************************************************************************
-->

<Project>
  <Target Name="RemovePrivatePackageReference" AfterTargets="ResolveReferences">
    <ItemGroup>
      <_PrivatePackagesReferences Include="@(PackageReference)"
                                  Condition="%(PackageReference.PrivateAssets) == 'all' or $([System.String]::Copy('%(PackageReference.PrivateAssets)').Contains('runtime'))">
        <NuGetPackageId>%(Identity)</NuGetPackageId>
      </_PrivatePackagesReferences>
    </ItemGroup>
    <ItemGroup>
      <_ReferenceCopyLocalPathsFromPackages Include="@(ReferenceCopyLocalPaths)" Condition="%(ReferenceCopyLocalPaths.NuGetPackageId) != ''" />
    </ItemGroup>
    <ItemGroup>
      <_PrivatePackageReferenceCopyLocalPaths 
        Include="@(_ReferenceCopyLocalPathsFromPackages)" Condition="'%(NuGetPackageId)' != '' and '@(_PrivatePackagesReferences)' != ''" />
    </ItemGroup>
    <ItemGroup>
      <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(Identity)' != '' and '@(_PrivatePackageReferenceCopyLocalPaths)' != ''" />
    </ItemGroup>
  </Target>
</Project>

Я уверен, что объединение группы предметов можно как-то оптимизировать. Надеюсь, это поможет, обратная связь приветствуется.

0 голосов
/ 11 марта 2019

Самый простой способ - щелкнуть правой кнопкой мыши по DLL и выбрать свойства в представлении обозревателя решений на вкладке ссылок.Оттуда вы можете установить флаг вручную для всего пакета.

Если это не сработает в вашем случае, вы можете установить флажок «Копировать локально» в формате package.config, как это было раньше.делать, а затем перенести эту зависимость в ваш проект в виде формата ссылки на пакет.

...