Multiple MSBuild DLLs in One NuGet Package

I have a Visual Studio 2017 solution that contains two projects:

Foo.csproj
Foo.Core.csproj

Both of these projects focus on several frameworks: net452;netstandard1.2

Foo.csproj includes a link to the Foo.Core.csproj project:

<ItemGroup>
    <ProjectReference Include="..\Foo.Core\Foo.Core.csproj" />
</ItemGroup>

When I create the NuGet package for Foo.csproj, I want the nupkg file to include both of these assemblies.

Currently, a NuGet package is being created that has Foo.dll, and then NuGet depends on Foo.Core (which does not exist).

How can I generate one NuGet package using msbuildthat will contain both assemblies?

For reference, this is the command I am currently using (which does not work the way I want it):

msbuild /p:restore,pack Foo.csproj
+8
source share
4 answers

NuGet . GitHub .

NuGet.

  1. "Nugetizer 3000"

NuGet , nuget NuGet.Build.Packaging. - GitHub, , , (!) ( , , , GitHub , ).

  1. (2.0.0 tooling/VS 2017 15. 3+): csproj, DLL

, MSBuild, . , <ProjectReference>, nuget :

<ProjectReference Include="..\libA\libA.csproj" PrivateAssets="All"/>

, libA.dll nuget:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeP2PAssets</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="IncludeP2PAssets">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)\testprivatelib.dll" />
  </ItemGroup>
</Target>

, <PackageReference> , , , .

  1. .nuspec

, , "" , . NuGet .nuspec , <NuspecFile> <NuspecProperties>, .nuspec. ] .

:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.4</TargetFramework>
    <NuspecFile>$(MSBuildThisFileDirectory)$(MSBuildProjectName).nuspec</NuspecFile>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\LibB\LibB.csproj" />
  </ItemGroup>

  <Target Name="SetNuspecProperties" BeforeTargets="GenerateNuspec">
    <PropertyGroup>
      <NuspecProperties>$(NuspecProperties);id=$(AssemblyName)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);config=$(Configuration)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);version=$(PackageVersion)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);description=$(Description)</NuspecProperties>
      <NuspecProperties>$(NuspecProperties);authors=$(Authors)</NuspecProperties>
    </PropertyGroup>
  </Target>
</Project>

.nuspec , (somelib.csproj => somelib.nuspec), . , , PackageVersion.

.nuspec :

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <authors>$authors$</authors>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <dependencies>
      <group targetFramework=".NETStandard1.4">
        <dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\$config$\netstandard1.4\*.dll" target="lib\netstandard1.4\" />
  </files>
</package>

, NuGet <dependency> .nuspec, <PackageReference> . . NuSpec.

GitHub, .nuspec .

+19

, (https://github.com/NuGet/Home/issues/3891), csproj SDK, .netcore.

, nuget pack -IncludeReferencedProjects (: https://docs.microsoft.com/en-us/nuget/tools/cli-ref-pack), : ", . .nuspec , , . . "

*.nuspec ( ), -IncludeReferencedProjects pack, dll dll nuget.

nuget.exe pack yourProject.csproj -IncludeReferencedProjects
+1

, , - , .NET Standard, " NuGet " .

, , " " DLL , ( ), . , .NET Standard - .

. csproj PrivateAssets , :

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

csproj:

<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>

<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
    <ItemGroup>
        <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'all'))" />
    </ItemGroup>
</Target>

, PDB NuGet, ( ).

+1

, Nuspec, msbuild, , .csproj " <Version>2.0.0</Version> ", :

msbuild myproject.csproj -t:pack -p:Configuration=Release -p:NuspecProperties=Configuration=Release;PackageVersion=1.2.3

.nupgk - 2.0.0. , MS , .

0

Source: https://habr.com/ru/post/1680981/


All Articles