我该如何构建NuGet包?

时间:2018-02-06 21:51:48

标签: c# visual-studio visual-studio-2015 nuget

我想要为我正在进行的许多项目提供一些功能。所以我自然认为我应该创建一个包含共享代码的NuGet包。所以我:

  1. 创建了一个类库(在本例中称为ADUserCacheUsage)。
  2. 修正了该类库的程序集信息。
  3. 转到ADUserCacheUsage.csproj的目录,并在命令窗口中nuget spec。这会生成.nuspec文件。
  4. 修正了我项目的nuspec文件。
  5. nuget pack ADUserCacheUsage.csproj -Build -Symbols -Properties Configuration=Release(毕竟,如果有人在外部使用该软件包,他们只需要发布版本,对吗?)
  6. nuget add ADUserCacheUsage.1.0.0.nupkg -source "C:\Program Files (x86)\Microsoft SDKs\NuGetPackages"
  7. 太棒了,当我在包管理器中选择机器源时,我的NuGet包就出现了。所以我可以在我的项目中使用它。

    我正在制作一个示例网页来使用它。所有示例都调用一个函数并将结果输出到网页上。

    问题是,每当我尝试在调试模式下运行此示例项目时,都会收到警告消息

      

    您正在调试ADUserCacheUsage.dll的发布版本。

    所以大概我应该在我的包中包含我的类库的调试版本,除了发布版本,对吧?我不希望示例项目的最终版本打扰调试信息,可能是缓慢和膨胀(对于一个只是样本的项目而言,这无疑是个问题,但我正在考虑最佳实践和未来我可能会有更大,更复杂的包装)。

    但我希望能够在没有此错误的情况下运行调试。每当我创建一个Web项目时,它都包含许多其他项目,并且它永远不会给我这个错误,例如NewtonSoft.json。那么我该怎么做才能以正确的方式做到这一点? nuget.org上的每个软件包都包含调试版本吗?

1 个答案:

答案 0 :(得分:0)

NuGet包不包含调试信息。

相反,有单独的NuGet symbol packages (ending with .symbols.nupkg)包含调试符号(Release文件)和源代码文件。可以使用nuget pack -Symbolsdotnet pack --include-symbols命令工具创建符号包。

在创建和托管符号包之后(在symbol server或本地文件系统上),您可以configure Visual Studio使用它们来逐步执行代码,即使代码在NuGet包是使用frame模式构建的。