代码之家  ›  专栏  ›  技术社区  ›  Tedford

强制项目引用包含在netstandard nuget包中

  •  1
  • Tedford  · 技术社区  · 6 年前

    我有一个netstandard项目,其中包括两个项目引用。visual studio 2017正被用于构建nukpg。构建项目时,生成的nupkg只包含该项目生成的程序集,并将两个项目引用作为nuget依赖项列出。有没有办法强制打包将这些程序集包含为lib文件?

    项目文件

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFramework>net462</TargetFramework>
        <RootNamespace>Verifier.Observations.DevOps.Health</RootNamespace>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
        <VersionPrefix>1.0.1</VersionPrefix>
      </PropertyGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\Verifier.Observations.Aspects\Verifier.Observations.Aspects.csproj" />
        <ProjectReference Include="..\Verifier.Observations\Verifier.Observations.csproj" />
      </ItemGroup>
    
      <ItemGroup>
        <Reference Include="System.ComponentModel.Composition"/>
        <Reference Include="System.Net.Http" />
      </ItemGroup>
    
    </Project>
    

    enter image description here

    更新 根据@alexgiondea msft的反馈,现在可以根据需要使用以下命令创建包

    项目文件

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <VersionPrefix>1.0.1</VersionPrefix>
        <TargetFramework>net462</TargetFramework>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
        <NuspecFile>Verifier.Observations.DevOps.Health.Nuspec</NuspecFile>
       <NuspecProperties>version=$(VersionPrefix);id=$(MSBuildProjectName);author=$(Authors);copy=$(Copyright);iconUrl=$(PackageIconUrl)</NuspecProperties>
      </PropertyGroup>
      <ItemGroup>
        <ProjectReference Include="..\Verifier.Observations.Aspects\Verifier.Observations.Aspects.csproj" />
        <ProjectReference Include="..\Verifier.Observations\Verifier.Observations.csproj" />
      </ItemGroup>
      <ItemGroup>
        <Reference Include="System.ComponentModel.Composition" />
        <Reference Include="System.Net.Http" />
      </ItemGroup>
    </Project>
    

    努斯佩克

    <package >
      <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <title>$title$</title>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <iconUrl>$iconUrl$</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Inspect automation service to ensure it is up and operational</description>
        <releaseNotes></releaseNotes>
        <copyright>$copy$</copyright>
        <tags>verifier-observation-plugin automation</tags>
        <dependencies>
          <group targetFramework="net462" />
        </dependencies>
        <references>
          <group targetFramework="net462">
            <reference file="Verifier.Observations.DevOps.Automation.dll" />
          </group>
        </references>
      </metadata>
      <files>
        <file src="bin\*\net462\*.dll" target="lib\net462" />
        <file src="bin\*\net462\*.pdb" target="lib\net462" />
      </files>
    </package>
    
    1 回复  |  直到 6 年前
        1
  •  7
  •   Alex Ghiondea - MSFT    6 年前

    您可以使用项组中的项来控制程序集在nuget包中的部署位置,如下所示:

    <ItemGroup>
        <None Include="!!path_to_assembly!!">
            <PackagePath>lib\net462</PackagePath>
            <Pack>true</Pack>
            <Visible>false</Visible>
        </None>
    </ItemGroup>
    

    它应该包含包中指定的程序集。

        2
  •  2
  •   Matheus Camargo    5 年前

    您可以将以下目标添加到.csproj中:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFrameworks>netstandard2.0;net47</TargetFrameworks>
        <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
      </PropertyGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\ClassLibrary2\ClassLibrary2.csproj" PrivateAssets="all" />
        <ProjectReference Include="..\ClassLibrary3\ClassLibrary3.csproj" Condition="'$(TargetFramework)' == 'net47'" PrivateAssets="all" />
      </ItemGroup>
    
      <Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
        <ItemGroup>
          <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" />
        </ItemGroup>
      </Target>
    </Project>
    

    Source 1

    Source 2

    参考: Advanced extension points to create customized package