Project создает пакет nuget, который зависит от другого проекта, который не создает пакет nuget - PullRequest
1 голос
/ 14 марта 2019

Если у меня есть проект (P1), который создает пакет nuget, и я делаю его зависимым от проекта (P2), который не создает пакет nuget, то сгенерированный пакет будет по-прежнему ссылаться на P2 как nugetпакет .

Шаги для воспроизведения

  • Создать решение с 2 проектами C # (P1 и P2)
  • Сделать P1 зависимым от P2.
  • Добавьте следующую строку в P1.csproj (для создания пакета nuget)

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

  • Постройте решение
  • Откройте сгенерированный файл P1.nupkg, например, NuGet Package Explorer

Обратите внимание, что пакет NuGet зависит от другого пакета NuGet с именем P2.Однако этот пакет не существует и никогда не будет существовать, поскольку я не велел проекту P2 создать пакет nuget.

Вопрос

Как заставить P2.dll включатьсяв папке P1.nupkg lib?В идеале это будет сделано только для ссылок, которые не сами создают пакет nuget.

Другие вопросы

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Один из обходных путей - пометить любые активы, которые вы не хотите включать, как <PrivateAssets>all</PrivateAssets>, а затем включить приведенный ниже код в файл проекта.

См. https://github.com/nuget/home/issues/3891#issuecomment-459848847 для получения дополнительной информации

<ItemGroup>
  <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj">
    <PrivateAssets>all</PrivateAssets>
  </ProjectReference>
</ItemGroup>

<!--
  The following solves the problem that 'dotnet pack' does not include the DLLs from referenced projects.
  See https://github.com/NuGet/Home/issues/3891 for a description of the problem
  and for newer versions / workarounds / built-in methods.
-->
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
  <!-- include PDBs in the NuGet package -->
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
    <ItemGroup>
        <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'all'))" />
    </ItemGroup>
</Target>
1 голос
/ 14 марта 2019

Если я правильно понял, указанные сборки проектов не включаются в пакет nuget.

Вы можете попробовать следующую команду при создании пакета nuget, используя следующую команду:

nuget pack projectfile.csproj -IncludeReferencedProjects

Это должно включать P2.dll в nuget. См. Эту страницу MSDN для получения более подробной информации.

Надеюсь, это поможет.

...