Pro*_*uck 15 c# dll nuget-package
我正在使用Nuget Package Explorer来创建一些nuget包.我设法在VS中以Release模式构建项目并将dll和pdb文件添加到包中.
到目前为止一切都那么好,但是当我将软件包添加到另一个项目并尝试在调试时进入代码时,它将改为执行它.
我知道如果我想在调试时进入代码,我需要构建并将Debug dll和pdb添加到我的包中.我不确定如何将这些添加到我已经创建的包中,该包已经包含Release dll和pdb文件,它们的名称相同.
有什么想法吗?
Tew*_*ewr 11
我的想法是,NuGet包装很多关于约定.
有一个在包装相同的命名空间和相同的名字没有问题的不同的平台(如lib/net40/mydll.dll,lib/net35/mydll.dll等在同一个包),为的NuGet将平台筛选注册的依赖.
为同一平台构建多个版本似乎是非常规的,这种讨论偏向于为每个构建制作一个包.这并不意味着你不能这样做,但你首先应该问自己是否应该这样做.
也就是说,如果您的调试和发布版本非常不同(条件编译等),这可能会有用.但是,在安装软件包时,最终用户将如何选择Release或Debug?
一个想法可能是,每个构建配置一个版本.两者都可以安装到项目中.要做到这一点,要么将目标文件添加到包中,要么构建一个powershell安装脚本,直接在目标项目文件中添加条件引用,如果你想要的东西比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>
Run Code Online (Sandbox Code Playgroud)
为您提供创建的调试和发布文件夹(平台文件夹是可选的),构建输出将根据配置进行有效更改 - 提供的数据包使用者具有传统的配置名称,但您可以随时使用$(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
Run Code Online (Sandbox Code Playgroud)
目标文件内容:
<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>
Run Code Online (Sandbox Code Playgroud)
lib文件夹中的dll 将自动添加为引用,在项目文件中创建以下内容:
<Reference Include="YourLib>
<HintPath>..\packages\YourLib.1.0.0\lib\net\$(Configuration)\YourLib.1.0.0.dll</HintPath>
<Private>True</Private>
</Reference>
Run Code Online (Sandbox Code Playgroud)
第一次构建项目后,目标会将发布和调试版本从tools\release和tools\debug文件夹复制到lib \net\release和lib \net\debug文件夹.最后,它将删除lib \net\$(Configuration)文件夹
享受(或不 - 我个人不喜欢这个解决方案).
| 归档时间: |
|
| 查看次数: |
6589 次 |
| 最近记录: |