gpt4 book ai didi

c# - dotnet pack 命令和 nuspec 文件不包括项目的 DLL

转载 作者:行者123 更新时间:2023-11-30 15:53:30 24 4
gpt4 key购买 nike

我有一个名为 ProjectName.Logging 的 .NET Standard 2.0 项目用ProjectName.Logging.nuspec文件。

此文件文件在 .csproj 中引用我的项目

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<NuspecFile>ProjectName.Logging.nuspec</NuspecFile>
</PropertyGroup>

这是我的 .nuspec

<?xml version="1.0"?>
<package >
<metadata>
<id>ProjectName.Logging</id>
<version>1.2.1</version>
<authors>Jérôme MEVEL</authors>
<description>Just a logging component</description>
<dependencies>
<dependency id="Dapper" version="1.50.5" />
<dependency id="Another.Project" version="1.1.1" />
<dependency id="Microsoft.Extensions.DependencyInjection" version="2.1.1" />
<dependency id="Microsoft.Extensions.Logging" version="2.1.1" />
<dependency id="Microsoft.Extensions.Logging.Abstractions" version="2.1.1" />
<dependency id="NLog" version="4.5.8" />
<dependency id="NLog.Extensions.Logging" version="1.2.1" />
<dependency id="NLog.Web.AspNetCore" version="4.6.0" />
<dependency id="System.Data.SqlClient" version="4.5.1" />
</dependencies>
</metadata>
<files>
<file src="bin\Release\netstandard2.0\ProjectName.Logging.dll" target="lib/netstandard2.0/ESHCloud.Logging.dll" />
<file src="ProjectName.Logging.targets" target="build/ProjectName.Logging.targets" />
<file src="NLog/Nlog.config" target="content/Nlog.config" />
</files>
</package>

如您所见,我手动包含了 ProjectName.Logging.dll文件,我什至必须包括 Release因为使用了 MsBuild 变量 $(Configuration)在我的 .nuspec 中不起作用文件。

我通过在我的项目目录中执行此命令来打包项目

dotnet pack --output C:/Nuget --force

如果我删除 <files>来 self 的元素 .nuspec当我运行 dotnet pack命令,我生成的 Nuget 包是完全空的。

另一方面,如果我运行 dotnet pack命令没有 .nuspec文件,绝对我项目中的所有内容都包含在 Nuget 包中。

那么 dotnet pack 是怎么回事呢?命令?我不明白我做错了什么。

如何在无需指定配置(DebugRelease)的情况下将我项目的 DLL 包含在 Nuget 包中?

最后一件事:我不想使用 nuget pack命令

我在我们的 VSTS 服务器(最近重命名为 Azure DevOps)上充分利用了 Nuget,但我无法完全控制这些构建服务器(我的经理有,但他似乎太忙了,无暇顾及这些) ).

综上所述,nuget pack 不是我的选择。我想用 dotnet pack连同 .nuspec文件。

谢谢

最佳答案

要在不指定配置的情况下添加 DLL,请使用 glob 模式:

<file src="runtimes\**" target="runtimes/"/>

如果您使用 nuget.exe,您可以使用 replacement token :

<file src="bin\$configuration$\netstandard2.0\*.dll" target="lib\netstandard2.0\"/>

如果你真的需要使用 nuspec 文件,你最好使用 nuget.exe .如果你不想使用 nuget.exe放下 nuspec。我已经完成了 a fair amount of workdotnet和 nupkgs 在过去的几周内将 nuspec 与项目文件混合在一起是很麻烦的。

你可以把majority of the nupkg meta-data直接在 csproj 中:

<PropertyGroup>
<PackageId>Subor.nng.NETCore</PackageId>
<PackageVersion>0.0.2</PackageVersion>
<Authors>Subor</Authors>
...
</PropertyGroup>

这是 the recommended approach when using the dotnet CLI . Likewise for msbuild使用 PackageReference 格式。

Here's an example of a project我一直在努力。 dotnet pack构建一个包 bin/Debug/dotnet pack --configuration Release构建 this nuget.org package .

项目中的所有内容都不应复制到 nupkg 中。在 Visual Studio 中检查文件的 Properties 并确保所有内容都没有标记为 “Content” 等。还要检查项目文件以查看文件是否正在获取补充说不应该。寻找(未)使用 <PackagePath><IsPackable> .

在不知道您项目的细节的情况下,我会提到尝试一些 arguments to dotnet pack .

关于c# - dotnet pack 命令和 nuspec 文件不包括项目的 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52305975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com