Терпите меня - это необычный сценарий. У меня есть 4 проекта в моем решении. В самом верхнем проекте упоминаются 3 других проекта. Ни один из 3 других проектов не ссылается друг на друга. Итак, архитектура выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/BBNhF.png)
Теперь, когда я собираю проект AI, хочу, чтобы он создавал пакет nuget, содержащий проекты B, C и D, но не проект А. Поскольку это стандарт. NET, я могу настроить вкладку «Пакеты» проекта А для автоматического создания пакета nuget при его сборке, установив флажок «Создать пакет NuGet при сборке». Затем я могу включить B, C и D, внеся следующие изменения в файл csproj A:
<ItemGroup>
<ProjectReference Include="..\B.csproj">
<PrivateAssets>all</PrivateAssets>
</ProjectReference>
<ProjectReference Include="..\C.csproj">
<PrivateAssets>all</PrivateAssets>
</ProjectReference>
<ProjectReference Include="..\D.csproj">
<PrivateAssets>all</PrivateAssets>
</ProjectReference>
</ItemGroup>
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
<Version>1.0.0-beta</Version>
<PackageId>A</PackageId>
<Company></Company>
<Product>A</Product>
<Description></Description>
<Authors></Authors>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'all'))" />
</ItemGroup>
</Target>
В идеале я хотел бы добавить строку для удаления A.dll из nuget пакет. Это возможно? A - это проект-обертка, который никогда не понадобится потребляющему коду. Невозможно, чтобы B, C и D. ссылались друг на друга.
ОБНОВЛЕНИЕ Так я решил (спасибо @tom redfern)
Я создал файл nuspe c вручную:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>A</id>
<version>1.0.0-beta</version>
<authors>Foo</authors>
<owners>Bar</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>A package</description>
<dependencies>
<group targetFramework=".NETStandard2.0">
</group>
</dependencies>
</metadata>
<files>
<file src="bin\Release\netstandard2.0\B.dll" target="lib\netstandard2.0\B.dll" />
<file src="bin\Release\netstandard2.0\C.dll" target="lib\netstandard2.0\C.dll" />
<file src="bin\Release\netstandard2.0\D.dll" target="lib\netstandard2.0\D.dll" />
</files>
</package>
Затем в мой файл .csproj для AI поместите следующее, чтобы автоматически упаковать его после сборки:
<Target Name="__PackNuGetPackage" AfterTargets="Build">
<Exec Command="$(NugetPackage)nuget.exe pack "A.nuspec"" />
</Target>