【发布时间】:2018-07-17 01:55:20
【问题描述】:
我想将一些功能提供给我正在进行的许多项目。所以很自然地我想我应该制作一个 NuGet 包来包含共享代码。所以我:
- 创建了一个类库(在本例中称为 ADUserCacheUsage)。
- 修复了该类库的程序集信息。
- 进入
ADUserCacheUsage.csproj的目录,然后在命令窗口中进行nuget spec。这会生成一个.nuspec文件。 - 为我的项目修复了那个 nuspec 文件。
-
nuget pack ADUserCacheUsage.csproj -Build -Symbols -Properties Configuration=Release(毕竟,如果有人在外部使用这个包,他们只需要发布版本,对吧?) nuget add ADUserCacheUsage.1.0.0.nupkg -source "C:\Program Files (x86)\Microsoft SDKs\NuGetPackages"
太好了,当我在包管理器中选择机器源时,我的 NuGet 包就会显示出来。所以我可以在我的项目中使用它。
我正在制作一个示例网页来使用它。该示例所做的只是调用一个函数并将结果输出到网页上。
问题是,每当我尝试在调试模式下运行此示例项目时,都会收到警告消息
您正在调试 ADUserCacheUsage.dll 的发布版本。
所以大概我应该在我的包中包含我的类库的调试版本,除了发布版本,对吧?我不希望示例项目的最终版本打扰调试信息,可能会变得缓慢和臃肿(诚然,对于一个只是一个示例的项目来说问题不大,但我正在考虑最佳实践和未来我可能会有一个更大、更复杂的包)。
但我希望能够在调试中运行而不会出现此错误。每当我创建一个 Web 项目时,它都会包含许多其他项目,并且它从来没有给我这个错误,例如,NewtonSoft.json。那么我应该怎么做才能以正确的方式做到这一点? nuget.org 上的每个包都只包含调试版本吗?
【问题讨论】:
-
首先很多包不包含符号(例如 Newtonsoft.Json)。其次,这可能只是您构建 dll 的机器上的问题,因为调试器能够从 pdbs 中的信息中找到源文件。在没有源代码的另一台机器上,您将无法调试到库中。
-
您将 Release 指定为您的构建配置。将其更改为调试,PDB 将被包括在内
-
但是应该我指定调试版本吗? nuget.org 上的所有软件包是否都在分发其调试版本?
-
AFAIK,nuget.org 上的大多数包都不会分发它们的调试版本,因为它没有多大意义,NuGet 包通常只包含一组特定目标的程序集框架。它并不是真正设计用于发布调试和发布版本。请查看此线程:stackoverflow.com/questions/36053961/… 和 stackoverflow.com/questions/47799179/… 了解详情。所以 NightOwl888 说的是对的。
-
@LeoLiu-MSFT 正如我所想。所以我指定了发布配置。但是我们又回到了我原来的问题:我收到一条错误消息,说我正在尝试调试一个发布 dll,但它只发生在我的包中。
标签: c# visual-studio visual-studio-2015 nuget