假设我有一个具有这种结构的项目:
MyLibrary\
MyLibrary.sln
MyLibrary.Core\
MyLibrary.Core.csproj
MyLibrary.Extensions\
MyLibrary.Extensions.csproj
MyLibrary.Tests\
MyLibrary.Tests.csproj
Run Code Online (Sandbox Code Playgroud)
我想创建一个包含MyLibrary.Core.dll和MyLibrary.Extensions.dll的NuGet包.我似乎无法弄清楚如何让NuGet这样做.我已经尝试手动构建spec文件,我尝试使用"nuget spec MyLibrary.Core.csproj"构建一个.我已经尝试将所有DLL添加到lib /文件夹中,我理解这是基于约定的机制,用于将DLL添加到包中.在每种情况下,我都可以将MyLibary.Core.dll放入包中,但MyLibrary.Extensions.dll最终不会与它一起打包.
TLDR:创建具有多个项目/程序集的NuGet包的最佳实践是什么?是否有专门针对此的教程?我发现的教程都集中在简单的单项目演示上.
lad*_*dge 40
您将在单个项目(或nuspec文件)上运行NuGet,但它通过该file元素支持指向其他项目的指针.此元素使用项目引用的名称,因此您可以避免a)找到其他项目文件的位置,以及b)将文件作为构建后步骤复制到特定位置.
假设你有一个MyLibrary.Core.csproj的nuspec文件,它引用了MyLibrary.Extensions和MyLibrary.Tests,这样它们在构建后最终会进入bin目录:
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
...
</metadata>
<files>
<file src="bin\Release\MyLibrary.Extensions.dll" target="lib\net40" />
<file src="bin\Release\MyLibrary.Tests.dll" target="lib\net40" />
</files>
</package>
Run Code Online (Sandbox Code Playgroud)
通过此设置,您的所有引用都应该在NuGet包中的适当位置.你仍然在那里有硬编码的'Release',但是我敢打赌最不可能不分发他们的调试版本的NuGet包.
BNL*_*BNL 21
您是否生成了一个空白的nuspec文件:
nuget spec
Run Code Online (Sandbox Code Playgroud)
如果您使用该文件,然后将您的dll放在名为lib的文件夹下,它将打包它们.
尝试从项目或DLL生成nuspec文件时遇到了一些麻烦.此外,如果手动引用nuspec文件中的任何文件,则不使用约定.这可能是dll或项目生成的nuspec的问题.
此外,如果您尝试从在不同文件夹中执行的构建脚本运行此命令,则可以通过-BasePath命令行告诉nuget.\ lib文件夹的位置:
build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37005 次 |
| 最近记录: |