我正在尝试从VS 2017项目创建一个NuGet包,其中包含对第三方DLL (Kendo.mvc.dll)的引用。无论我尝试什么,我都无法让nuget pack自动地将DLL包含在我的NuGet包的lib文件夹中。
我最初使用命令.nuspec从命令行创建了nuget spec [project's name and path].csproj文件。然后,我调整了该文件的设置,这导致了这个.nuspec文件:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>our names</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>the description</description>
<releaseNotes>First release</releaseNotes>
<copyright>Copyright 2018</copyright>
<tags>entity-framework-6 mvc5</tags>
</metadata>
</package>然后我使用nuget pack创建了这个包,结果如下:

根据我在文档(MS创建NuGet包)中所读到的内容,我希望nuget pack会自动在包中包含项目中引用的任何非nuget源DLL,但这并没有发生吗?
我试过以下几点,看看它是否有任何区别,但都没有用:
lib文件夹添加到我的项目的根目录中,并将DLL放入其中(并尝试更改Build并将其复制到Output设置)。它在NuGet包中的Content文件夹下创建了一个lib文件夹,而不是将DLL添加到包含程序集DLL的同一个lib文件夹中。我这么做是因为医学博士谈论的是基于约定的文件结构。这个问题讨论了为第三方DLL添加一个单独的元素,我猜它指的是在生成包之前显式地在.nuspec文件中添加文件。
<files>
<file src="bin\Debug\Kendo.Mvc.???" target="lib\net461" />
</files>这确实有效,但是如果需要从.nuspec文件生成csproj文件时,不应该自动添加它吗?
发布于 2018-09-25 09:07:20
但是,如果需要从csproj文件生成.nuspec文件,不应该自动添加它吗?
是的,非nuget来源的DLL在默认情况下不会在从.nuspec文件生成.csproj文件时自动添加。
当我们从一个.nuspec文件生成.csproj文件时,.nuspec只包含基本信息,例如标题、描述等。您可以从程序集信息、属性->应用程序->组装信息中获取此信息:

,但默认情况下它不包括第三方DLL。。
因此,为了包含第三方DLL,我们需要在.nuspec文件中显式地添加文件,就像您所做的一样。
有关更多细节,请查看从dll创建nuget包。
顺便说一句,如果第三方DLL是项目中引用的nuget源DLL,您可以使用参数-IncludeReferencedProjects在从csproj文件生成.nuspec文件时自动添加它。
希望这能有所帮助。
发布于 2020-10-05 13:37:41
如果您想通过Visual或dotnet执行此操作,则可以编辑csproj文件,添加一个ItemGroup以包含dll,如下所示:这将在nuget包中打包其他dll和当前的项目dll。
<ItemGroup>
<Content Include="<path to other dll>">
<Pack>true</Pack>
<PackagePath>lib\$(TargetFramework)</PackagePath>
</Content>
</ItemGroup>https://stackoverflow.com/questions/52484115
复制相似问题