我有一个简单的.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
文件,但是它具有所有源代码(不知道为什么),并且在其他项目中使用时,它们无法引用程序集,因为它们位于{{ 1}}文件夹。
我看过一些从.Net Core项目创建Nuget程序包的指南,但都没有提到与bin\Release\netcoreapp2.1
文件夹有关的内容。
我需要了解是否缺少某些东西或做错了什么。
谢谢。
编辑:添加了项目文件和.nuspec文件
项目文件:
lib
<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
答案 0 :(得分:1)
这里似乎存在一些误解。
首先,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
内部的内容一无所知。使用SDK样式的项目时,即使多目标的更复杂项目也不需要关心lib
文件夹。只需在<TargetFrameworks>
元素中指定目标TFM,然后让SDK打包nupkg
本身即可。它知道该怎么办。如果您在csproj
中进行了任何操作以尝试将输出dll强制移至nupkg
中的其他位置,则比改进问题更可能引起问题。
没有看到您的.csproj
,我无法猜出您可以怎么做才能将警告消息打包,但是就像我说的那样,全新的dotnet new classlib
打包就可以了,如果您的项目仅包含代码文件,在csproj
中不需要任何与打包路径相关的内容。