【问题标题】:Nuget package creation not including referenced dllsNuget 包创建不包括引用的 dll
【发布时间】:2019-10-11 05:31:57
【问题描述】:

我正在使用 Visual Studio 2019 社区版和包管理器控制台。我正在使用 .net core 2.2 并启用了包引用。我希望能够创建一个单独的 nuget pack coreproj1,它还将包含 Coreproj2 和 coreProj3 的 dll,而不必打包 CoreProj2 和 CoreProj3,因为有很多项目并且打包它们是不可行的。我在网上查看并找不到明确的解决方案,因为他们中没有多少人使用包参考

  CoreProj1 references CoreProj2 and CoreProj3 
  CoreProj2 and CoreProj3 do not reference anything

我正在使用

   dotnet pack "full project path" --output "outputPath" 

当我尝试安装软件包时,出现以下错误(CoreProj3 出现相同的错误)

  Error NU1101  Unable to find package CoreProj2. No packages exist with this id in source(s): LocalPackages, Microsoft Visual Studio Offline Packages, nuget.org,  TestNuget   source\repos\TestNuget\TestNuget\TestNuget.csproj   1

【问题讨论】:

    标签: .net-core nuget nuget-package packagereference


    【解决方案1】:

    包括使用 MSBuild 包目标的引用项目程序集(dotnet pack 实际上只是 dotnet msbuld -t:pack 的别名)is not supportednuget.exe pack 有一个 IncludeReferencedProjects 参数可以满足您的要求,但对于使用 PackageReference 或 SDK 样式项目(始终为 PackageReference)的项目不能正常工作。

    一种可能的解决方法是使用构建脚本首先构建所有项目,然后将所有程序集复制到 nuget 包布局中,然后使用 nuget.exe pack 打包该目录布局。

    另一种解决方法是使用带有一堆 <file src="..." target="lib\<tfm>\"> 元素的 nuspec,告诉 NuGet 从其编译位置打包所有程序集。

    另一种解决方法是使用 MSBuild 可扩展性告诉 NuGet 的 MSBuils 目标您想要在构建之后但在打包之前打包的程序集。上面链接的线程中有一些 cmets 给出了如何完成的示例。

    【讨论】:

      【解决方案2】:

      这是再现:

      <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
          <TargetFramework>net5.0</TargetFramework>
          <PackageId>CoreProj1</PackageId>
          <Description>CoreProj1</Description>
        </PropertyGroup>
        <ItemGroup>
          <ProjectReference Include="..\CoreProj2\CoreProj2.csproj" />
          <ProjectReference Include="..\CoreProj3\CoreProj3.csproj" />
        </ItemGroup>
      </Project>
      

      那么 Proj2 和 3 的内容是一样的:

      <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
          <TargetFramework>net5.0</TargetFramework>
          <IsPackable>false</IsPackable>
        </PropertyGroup>
      </Project>
      

      在第一次运行 dotnet pack 会导致包中没有任何一个引用项目的程序集。

      解决方法是安装 NuGetizer(免责声明:这是一个最初由 Xamarin/Microsoft 我自己创作的项目,然后在我分叉并获得所有权之前被放弃了):

      <ItemGroup>
        <PackageReference Include="NuGetizer" Version="0.5.0" />
      </ItemGroup>
      

      安装并再次运行dotnet pack 后,您将正确打包所有三个项目。此外,您还可以安装 dotnet 全局工具 nugetize,这样您就可以非常快速地检查要打包的内容,而不会增加构建时间:

      dotnet tool install -g dotnet-nugetize
      

      然后从项目文件夹中运行nugetize

      ❯ nugetize
      Package: CoreProj1.1.0.0.nupkg
              C:\Temp\corepack\CoreProj1\bin\CoreProj1.nuspec
          Authors    : CoreProj1
          Description: CoreProj1
          Version    : 1.0.0
      Contents:
          /lib/
          net5.0/
              CoreProj1.dll
              CoreProj1.pdb
              CoreProj2.dll
              CoreProj2.pdb
              CoreProj3.dll
              CoreProj3.pdb
      

      在控制台中使用微妙的颜色使其更漂亮:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 2017-09-02
        • 2016-04-16
        • 2018-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多