c# - .NET Core 项目的 dotnet pack 生成带有源的 .nupkg 文件
问题描述
我有一个简单的 .NET Core 2.1 类库项目,需要将其打包为 Nuget 包。为此,我正在使用以下命令:
dotnet pack <project>.csproj --output <outputFolder> /p:Configuration=Release
但是,我收到了这个警告:
C:\Program Files\dotnet\sdk\2.1.502\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(202,5): warning NU5100: The assembly 'obj\Release\netcoreapp2.1\<assembly>.dll' is not inside the 'lib' folder and hence it won't be added as a reference when the package is installed into a project. Move it into the 'lib' folder if it needs to be referenced.
我知道lib
文件夹是针对多个框架的,但我不希望这样。我只想针对 .NET Core 2.1。
最后我的.nupkg
文件被创建了,但是它有所有的源代码(不知道为什么),当在其他项目中使用时,它们不能引用程序集,因为它们在bin\Release\netcoreapp2.1
文件夹中。
我看过一些从 .Net Core 项目创建 Nuget 包的指南,但没有一个提到与lib
文件夹相关的内容。
我需要了解是否缺少某些东西或我做错了什么。
谢谢。
编辑:添加了项目文件和 .nuspec 文件
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Company>xxx</Company>
<RootNamespace>xxxx</RootNamespace>
<Product>xxxx</Product>
<Authors>xxxx</Authors>
<NuspecFile>xxxxx.nuspec</NuspecFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="5.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
</ItemGroup>
</Project>
.nuspec
文件:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>xxxxxx</id>
<version>1.0.0</version>
<title>xxxx</title>
<owners>xxxx</owners>
<description>xxxx</description>
<authors>xxxx.</authors>
<copyright>Copyright 2019 xxxx.</copyright>
<summary>xxx is a common code library for internal projects.</summary>
</metadata>
</package>
解决方案
这里似乎存在一些误解。
首先,该lib
文件夹nupkg
不是用于多目标,而是用于构建中的所有 dll。如果您的包仅支持 1 个目标框架名字对象 (TFM),那么您nupkg
将只有一个文件夹lib
,例如lib/netstandard2.0/MyLib.dll
,或者lib/netcoreapp2.1/MyLib.dll
如果您的应用程序使用的 API 是 .NET Core 2.1 运行时的一部分,而不是 netstandard。如果您的项目仅使用属于 netstandard 的 API,则以 netcoreapp 为目标没有任何好处,并且存在可能导致您将来出现问题的潜在问题,即使它现在运行良好。
其次,一个简单的类库(对我来说这意味着项目只包含.cs
文件,没有内容文件,没有构建文件,包将只包含 dll 和 NuGet 自己的文件)不需要知道nupkg
. lib
使用 SDK 样式项目时,多目标的更复杂项目不需要关心文件夹。只需在<TargetFrameworks>
元素中指定您的目标 TFM,然后让 SDKnupkg
自行打包。它知道该怎么做。如果您csproj
尝试将输出 dll 强制到 .dll 中的不同位置nupkg
,则更有可能导致问题而不是改进。
没有看到你的.csproj
,我无法猜到你可以做些什么来在包上收到警告信息,但就像我说的,一个全新的dotnet new classlib
包就可以了,如果你的项目只包含代码文件,你不应该需要任何东西csproj
与打包路径有关。
推荐阅读
- c++ - Qsort 和不兼容的比较器功能 - C++
- azure-table-storage - 从表中获取所有内容并将其存储在数组中
- amazon-web-services - 如何在本地测试 AWS Lambda 函数?
- angular - 在 Angular 应用程序中调度后端调用一次
- angularjs - 如何使用嵌套 ng-repeat 动态重复表列?
- c - 没有大括号的嵌套 IF-Else 的工作
- javascript - 不要在点击特定按钮时关闭手机键盘
- cordova - Cordova 如何在运行前卸载应用程序
- azure - 在枚举 VirtualMachineSizeTypes 中找不到 Azure VM 选项 B 系列
- wordpress - WordPress中的不同页面具有相同的页眉和页脚