忍受我-这是一个不寻常的情况。我的解决方案中有4个项目。最热门的项目引用了其他3个项目。其他3个项目中没有一个互相引用。所以架构是这样的:
现在,当我构建项目AI时,它希望它生成一个包含项目B,C和D但不包含项目A的nuget包。因为在.NET标准中,我可以配置项目A的packages选项卡以自动生成一个nuget包通过选中“在生成时生成NuGet软件包”选项进行生成时。然后,通过对A的csproj文件进行以下更改,可以使其包含B,C和D:
<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>
理想情况下,我想添加一行以从nuget软件包中删除A.dll。这可能吗? A是一个包装项目,不需要使用任何消耗代码。 B,C和D不可能互相引用。
您可以通过使用nuspec文件来实现:
<package >
<metadata>
<id>MyPackage</id>
<version>1.0</version>
<authors>Something</authors>
<owners>Something</owners>
<description>Somthing</description>
<copyright></copyright>
<dependencies>
<!-- any nuget package dependencies -->
<dependency id="AnotherPackage" version="2019.2.4.1" />
</dependencies>
</metadata>
<files>
<!-- this is where you can have complete control over which assemblies get added to your package. You can add them individually pr using wildcards. -->
<file src="..\obj\**\*.dll" target="lib" />
</files>
</package>
创建完.nuspec文件后,将其添加到解决方案中,然后使您的“ Nuget Pack”构建步骤读取nuspec文件而不是项目文件。