В VS2019 nuget не рассматривает указанные проекты как lib, а как пакеты nuget - PullRequest
3 голосов
/ 06 августа 2020

Я использую версию сообщества VS2019. У меня два. net основных проекта X, Y, X ссылается на Y, и я хочу упаковать X как пакет Nuget, я использую функцию пакета в VS2019. когда я пытаюсь добавить пакет Nuget X в другой проект, он ищет Y как пакет Nuget, а не как DLL, которая должна быть в X.

Как я могу это изменить, чтобы Y был добавлен как DLL в пакет X?

Я попытался добавить в проект X (.csproj) следующее:

  <PropertyGroup>
    <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
  </PropertyGroup>
  <Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
    <ItemGroup>
      <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths-&gt;WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" />
    </ItemGroup>
  </Target>

Но я все равно получаю тот же результат, nuget.exe пытается восстановить Y как пакет Nuget, а не как DLL поставляется с пакетом X.

  • ОБНОВЛЕНИЕ:

Также, если Y имеет другую зависимость Nuget, ее следует рассматривать в X без ссылки на нее непосредственно в X.

Ответы [ 2 ]

1 голос
/ 11 августа 2020

Я пробовал следующее: В проекте X:

  • Go в Dependencies-> Projects.
  • Щелкните правой кнопкой мыши проект Y, затем Properties.
  • Установите Private Assets на All Теперь это добавит файл dll Y в папку lib в файле X's nuspec. Это будет работать нормально, если Y не зависит от каких-либо других пакетов Nuget, о которых X не знает, потому что эти пакеты не будут упомянуты как зависимости в файле nuspec X.

Наконец, я остановился на этом: Просто укажите Y, создайте для него пакет и живите с ним: '(

0 голосов
/ 07 августа 2020

В VS2019 nuget не рассматривает проекты, на которые ссылаются, как lib, а как пакеты nuget

Фактически , новая функция nuget, которую вы использовали, а также PackagePath = "lib" функция будет рассматривать dll как зависимость nuget, а не как сборку dll.

Если вы просто хотите, чтобы Y был сборкой DLL, а не nuget пакет, эти методы не будут работать. Я пробовал эти методы, и это действительно заставило меня бороться.

После глубокого исследования я обнаружил, что проблема в том, что do tnet pack добавит указанный проект как пакет nuget автоматически помещается в основной пакет nuget. Поскольку dotnet pack автоматически генерирует файл Nuspec для упаковки проекта в соответствии с его правилами, которые по умолчанию обрабатывают указанный проект как пакет Nuget. Вы можете открыть файл X.nupkg и увидеть это под X.nuspec файл:

enter image description here

However, in this pack mechanism, we do not have the right to change the rule.

Suggestion

1) when you create the X.nupkg file using Pack Button in VS2019, please do some changes to X.nupkg manually.

Use zip to open nuget compressed package, then open X.nuspec file and delete these node:


         

Сохраните изменения , а затем используйте измененный X.nupkg.

2) Или вам следует создать собственный файл nuspe c на основе наших потребностей и правил вручную, чтобы управлять процессом пакета nuget.

Попробуйте использовать этот nuspec файл:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>xxx</id>
    <version>1.0.0</version>
    <title>xx</title>   
    ..................    
  </metadata>

<files>
<file src="bin\xxx\xxx\Y.dll" target="lib\xxx(targetframework)"/>
</files>

</package>

Также если Y имеет другую зависимость Nuget, ее следует рассматривать в X без ссылки на нее непосредственно в X. использовать dll пакета зависимостей указанного проекта.

И зависимости от связанных проектов всегда существуют в основном проекте.

Кроме , если вы все еще хотите , вы можете сообщить об этих проблемах на форуме нашей команды , и я надеюсь, что команда внимательно их проверит и даст вам удовлетворительный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...