Nuget 包创建不包括引用的 dll
Nuget package creation not including referenced dlls
我正在使用 visual studio 2019 社区版和包管理器控制台。我正在使用 .net core 2.2 并启用了包引用。我希望能够创建一个单独的 nuget 包 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
包括使用 MSBuild 包目标的引用项目程序集(dotnet pack
实际上只是 dotnet msbuld -t:pack
的别名)is not supported。 nuget.exe pack
有一个 IncludeReferencedProjects
参数可以满足您的要求,但对于使用 PackageReference
或 SDK-style 项目(始终为 PackageReference
)的项目无法正常工作。
一种可能的解决方法是创建一个构建脚本,该脚本首先构建所有项目,然后将所有程序集复制到 nuget 包布局中,并使用 nuget.exe pack
打包该目录布局。
另一种解决方法是使用 nuspec
和一堆 <file src="..." target="lib\<tfm>\">
元素,告诉 NuGet 从编译位置打包所有程序集。
另一种解决方法是使用 MSBuild 扩展性来告知 NuGet 的 MSBuils 目标您想要在构建之后但在打包之前打包的程序集。上面链接的线程中有一些评论给出了如何完成的示例。
这是重现:
<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>
安装它并再次 运行ning 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
它在控制台中使用微妙的颜色使其更漂亮:
我正在使用 visual studio 2019 社区版和包管理器控制台。我正在使用 .net core 2.2 并启用了包引用。我希望能够创建一个单独的 nuget 包 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
包括使用 MSBuild 包目标的引用项目程序集(dotnet pack
实际上只是 dotnet msbuld -t:pack
的别名)is not supported。 nuget.exe pack
有一个 IncludeReferencedProjects
参数可以满足您的要求,但对于使用 PackageReference
或 SDK-style 项目(始终为 PackageReference
)的项目无法正常工作。
一种可能的解决方法是创建一个构建脚本,该脚本首先构建所有项目,然后将所有程序集复制到 nuget 包布局中,并使用 nuget.exe pack
打包该目录布局。
另一种解决方法是使用 nuspec
和一堆 <file src="..." target="lib\<tfm>\">
元素,告诉 NuGet 从编译位置打包所有程序集。
另一种解决方法是使用 MSBuild 扩展性来告知 NuGet 的 MSBuils 目标您想要在构建之后但在打包之前打包的程序集。上面链接的线程中有一些评论给出了如何完成的示例。
这是重现:
<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>
安装它并再次 运行ning 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
它在控制台中使用微妙的颜色使其更漂亮: