目前,我将发布版本与Nuget一起打包到nuget.org的官方版本,但是我使用Nuget将调试版本打包为符号源推送到symbolsource.org.
编辑:( Jon Skeet,与Noda Time开发有一些偏见)
NuGet现在支持推送到NuGet gallery 和 symbolsource.org(或类似的服务器),如文档所述.不幸的是,这里有两个相互矛盾的要求:
这没关系,但是NuGet没有(据我所知)允许在同一个包中以有用的方式发布发布和调试版本.
所以,选择是:
前两个真正归结为调试和发布版本之间差异的影响......虽然值得注意的是,想要进入库代码之间也存在很大差异,因为你想要检查一些行为,并且想要调试库的代码,因为你相信你发现了一个bug.在第二种情况下,最好将库的代码作为Visual Studio解决方案并以这种方式进行调试,因此我不会过多关注这种情况.
我的诱惑是继续发布版本,期望相对较少的人需要调试,并且那些不会受发布版本中的优化影响很大的人.(无论如何,JIT编译器完成了大部分优化.)
那么,我们还没有考虑过其他选择吗?是否有其他考虑因素可以达到平衡?将NuGet软件包推向SymbolSource是否足够新,"最佳实践"真的还没有建立?
我已将我的团队使用的库放入从TeamCity部署到网络文件夹的nuget包中.我虽然无法调试这段代码!SymbolSource是我读过的一个解决方案,但我更愿意找到一些方法直接从Teamcity访问.pdb /源文件.有谁知道如何做到这一点?
编辑. 当我签'Include Symbols and Source'入Nuget Pack构建步骤时,除了网络文件夹中的.nupkg文件之外,TeamCity还会创建.Symbol.nupkg..Symbol.nupkg包含src和.pdb文件.
编辑. 我'Include Symbols and Source'在TeamCity上取消选中并将以下内容添加到我的nuspec文件中:
<files>
<file src="..\MyLibrary\bin\release\MyLibrary.dll" target="lib\net40" />
<file src="..\MyLibrary\bin\release\MyLibrary.pdb" target="lib\net40" />
<file src="..\MyLibrary\*.cs" target="src" />
<file src="..\MyLibrary\**\*.cs" target="src" />
</files>
Run Code Online (Sandbox Code Playgroud)
这在nuget包中添加了我的库的dll,pdb和源文件,并且没有生成.Symbols文件,我认为这只是符号服务器所需要的.
首先,我对 NuGet 还是很陌生。我在工作中开发了许多内部 C# 桌面应用程序,它们之间共享了一些通用代码。我一直在从使用项目引用切换到创建私有 NuGet 包并将它们托管在位于共享网络文件夹中的本地源中。我现在只研究了几天,但到目前为止我已经成功地将我的一些库项目转换成包并在其他项目中使用它们。
问题是,虽然我可以在依赖它们的其他解决方案中使用这些包提供的代码,但我没有获得 IntelliSense 支持或在包本身内进行调试的能力。事实证明,只有组装好的 DLL 分布在普通包中,根据我从网上搜索收集到的信息,我还需要创建包含 IntelliSense 和调试所需文件的符号包。
当仅使用网络共享文件夹作为本地提要时,我该如何做到这一点 - 同时使用常规包和符号包?许多在线答案都建议使用单独的符号服务器。但是,我无法将此代码公开发布到 symbolsource.org,而且我目前无法从我的雇主那里获得一台服务器来托管(这消除了 NuGet.Server、ProGet 等解决方案)。我正在寻找的可能吗?
我已经看过关于创建符号包和本地提要的官方文档,以及这个相关的问题。但这些都没有我正在寻找的信息。
编辑:通过记住在构建时打开 XML 文档生成,我确实获得了对我的包代码的 IntelliSense 支持,使用来自这个问题的信息。不过,仍然不确定调试支持。