如何使用nuget package explorer创建一个包含release和debug dll的nuget包?

我正在使用Nuget Package Explorer来创建一些nuget包。 我设法在VS中以Release模式构建项目并将dll和pdb文件添加到包中。

到目前为止一切都那么好,但是当我将软件包添加到另一个项目并尝试在调试时进入代码时,它将改为执行它。

我知道如果我想在调试时进入代码,我需要构建并将Debug dll和pdb添加到我的包中。 我不确定如何将这些添加到我已经创建的包中,该包已经包含Release dll和pdb文件,它们的名称相同。

有什么想法吗?

我的想法是,NuGet包装很多关于约定。

不同的平台打包相同的命名空间和相同的名称没有问题(如在同一个包中的lib/net40/mydll.dlllib/net35/mydll.dll等),因为NuGet将按平台过滤已注册的依赖项。

为同一平台构建多个版本似乎是非常规的 , 这种讨论偏向于为每个构建制作一个包。 这并不意味着你不能这样做,但你应该首先问自己是否应该这样做。

也就是说,如果您的调试和发布版本非常不同(条件编译等),这可能会有用。 但是,最终用户在安装软件包时如何选择Release或Debug?

一个想法可能是,每个构建配置一个版本。 两者都可以安装到项目中 。 要做到这一点,要么将目标文件添加到包中,要么构建一个powershell安装脚本 ,直接在目标项目文件中添加条件引用,如果你想要的东西比MsBuild可以为你做的更基本。

第一个策略的示例:创建一个.target文件(在您的包中,创建一个build文件夹,然后使用以下内容创建build\YourLib.targets ):

     ..\packages\YourLib.1.0.0\lib\Debug\YourLib.dll     ..\packages\YourLib.1.0.0\lib\Release\YourLib.dll    

为您提供创建的调试和发布文件夹(平台文件夹是可选的),构建输出将根据配置有效地改变 – 提供的数据包消费者具有传统的配置名称 ,但您总是可以使用$(Configuration)扩展条件逻辑.Contains等或者只是把它放在包自述文件中

受到@Tewr的启发,我发现了一个繁琐而又有效的解决方案。

使用以下文件结构创建nuget:

 lib\net\$(Configuration)\YourLib.1.0.0.dll <---- put here some dummy file named YourLib.1.0.0.dll tools\release\YourLib.1.0.0.dll <--- put here the release version tools\debug\YourLib.1.0.0.dll <--- put here the debug version build\YourLib.targets 

目标文件内容:

         

lib文件夹中的dll将自动添加为引用,在项目文件中创建以下内容: