如何使用nuget package explorer创建一个包含release和debug dll的nuget包?
我正在使用Nuget包资源管理器来创建一些nuget包。我已经设法在VS中以发布模式构建项目,并将dll和pdb文件添加到包中。如何使用nuget package explorer创建一个包含release和debug dll的nuget包?
到目前为止这么好,但是当我将包添加到另一个项目中并尝试在调试时插入代码时,它将替代它。
据我所知,我需要构建并添加Debug dll和pdb到我的包中,如果我想在调试时插入代码。我不确定如何将这些添加到我已经创建的包中,这些包已经包含Release dll和pdb文件,它们的命名方式相同。
有什么想法?
我的想法是,NuGet包装是很多约定。
有一个在(在同一个封装中lib/net40/mydll.dll
,lib/net35/mydll.dll
等)的包装相同的命名空间和相同的名称为不同平台没有问题,因为的NuGet将平台筛选注册的依赖。
针对相同平台构建多个版本似乎非常规,this discussion倾向于每个构建包。这并不意味着你不能这样做,但你应该首先问自己是否应该这样做。这就是说,如果你的调试和发布版本是非常不同的(条件编译等),但这可能很有用。但是,在安装软件包时,最终用户如何选择Release或Debug?
一个想法可能是,每个版本配置一个版本。 Both can be installed into the project。要做到这一点,可以添加一个targets file to your package或者编译a powershell install script,它可以直接在目标项目文件中添加条件引用,如果你想要的东西比任何MsBuild可以为你做的都要少。第一战术
示例:创建.TARGET文件(在你的包,创建一个build
文件夹,然后用下面的内容创建build\YourLib.targets
):
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<Reference Include="YourLib">
<HintPath>..\packages\YourLib.1.0.0\lib\Debug\YourLib.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<Reference Include="YourLib">
<HintPath>..\packages\YourLib.1.0.0\lib\Release\YourLib.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
提供了创建调试和发布文件夹(平台文件夹是可选的),构建输出将根据配置有效更改 - 提供的数据包使用者具有传统配置名称,但您可以始终使用$(Configuration).Contains etc扩展条件逻辑,或者只是将其放在包中自述文件
受@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
的目标文件内容:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CopyReferences" BeforeTargets="Build" Condition="Exists('..\packages\YourLib.1.0.0\lib\net\%24(Configuration)')">
<Exec Command="mkdir ..\packages\YourLib.1.0.0\lib\net\Release" />
<Exec Command="mkdir ..\packages\YourLib.1.0.0\lib\net\Debug" />
<Exec Command='copy "..\packages\YourLib.1.0.0\tools\Release\YourLib.1.0.0.dll" "..\packages\YourLib.1.0.0\lib\net\Release"' />
<Exec Command='copy "..\packages\YourLib.1.0.0\tools\Debug\YourLib.1.0.0.dll" "..\packages\YourLib.1.0.0\lib\net\Debug"' />
<Exec Command='rmdir /S /Q "..\packages\YourLib.1.0.0\lib\net\%24(Configuration)"' />
</Target>
在lib中的dll文件文件夹将被自动添加为引用创建以下项目文件中:
<Reference Include="YourLib>
<HintPath>..\packages\YourLib.1.0.0\lib\net\$(Configuration)\YourLib.1.0.0.dll</HintPath>
<Private>True</Private>
</Reference>
一旦你构建项目的第一次,则目标将复制从工具的发行和调试版本\释放和工具\调试文件夹的lib \网络\释放和的lib \网\调试文件夹。最后,它会删除lib \ net \ $(配置)文件夹
享受(或不 - 我个人不喜欢解决方案)。
这个答案应该关注。谢谢。 –