我从一个.net framework visual studio Class Library项目中创建了一个非常简单的NuGet包,其中的类库源代码是C#。
我使用以下命令创建了nuget包:
nuget pack MyProject.csproj -symbols -Properties "Configuration=Debug" -suffix debug
正如我所料,它创建了两个nuget包文件,即:
- MyProject.1.0.0-debug.symbols.nupkg
- MyProject.1.0.0-debug.nupkg
这些包基本上是相同的,除了带有“symbols”的包包括lib层次结构中的pdb文件和src文件夹中的源文件。
考虑到重复,我将文件MyProject.1.0.0-debug.symbols.nupkg
重命名为MyProject.1.0.0-debug.nupkg
,这将覆盖其中一个文件,这没有什么大不了的。
我将其部署到一个内部文件共享提要:
nuget add MyProject.1.0.0-debug.nupkg \\InternalShare\FeedFolder
在一个完全不同的项目和不同的解决方案中,我现在在Visual Studio中使用NuGet包管理器来使用NuGet包。所有工作都很好。代码也很好,在我的案例中,我制作了一个简单的控制台应用程序,它使用了包中的几个类,我已经证明它正确地使用了它们,没有发生任何意外。
到目前为止一切顺利。
现在,我在使用代码中设置了一个断点,并尝试单步执行源代码以调试包。它似乎可以正常工作,但实际上,它并没有进入与包一起分发的源代码。它实际上是从创建包开始单步执行ORIGINAL源代码,在我的机器上的一个完全不同且不相关的文件夹层次结构中。
好了。现在我在一台没有原始源代码的 * 单独 * 计算机上重新创建了我的简单控制台应用程序。在这台单独的计算机上,它位于内部网络上,因此可以访问文件共享,我使用NuGet包,再次,一切都编译并正常工作。
然而,当我尝试在visual studio调试器中单步执行包源代码时,它根本不起作用。调试器无法找到源代码,即使它就在包文件夹中。(调试器提供反汇编代码--没有太大帮助)。
这看起来应该是一个常见的用例,并且希望在nuget包中包含符号和源代码,所以我一定是做了一些愚蠢的事情,以至于调试器无法找到源代码。
各种版本的东西:
- Visual Studio:专业2017 15.9.11
- 在VS中安装的NuGet包管理器:4.6.0
- CLI NuGet版本:4.8.1.5435
- 针对.NET Framework的示例代码:4.6.1
我错在哪里?
非常感谢。
==================添加信息2019年4月17日下午3:30太平洋====================
这并不像我想象的那么糟糕。当我试图进入代码并说它找不到它时,我有机会浏览代码,这样我就能浏览到包裹了(假设我知道它在哪里!)并将调试器设置为宽松,一切都工作正常。好的一面是Visual Studio似乎记得我浏览到了哪里,并知道下次在那里查看。我不确定这个机制。
并且....如果我去我的原始计算机(上面有实际的包源代码),如果我改变了初始源代码,就像我准备下一个包一样,调试器(当然)意识到源代码已经改变了,同样提示我在其他地方寻找合适的源代码。
尽管如此,如果不需要像那样跳过铁环就太好了,所以我仍然会感激任何进一步的见解。
3条答案
按热度按时间falq053o1#
早在2019年2月,它就开始工作了。这里没有提到的一些事情,我添加到csproj文件中的是
我用nuget打包,使用的命令是:
我当时使用的是VS 15.9.4和nuget 4.9.3。有了这个,我可以成功地从网络路径调试nuget。不知道最近的版本有什么变化,现在不工作了。
wgxvkvu92#
一些基本原则:
下一页:
1.请参阅此doc for creating and publishing symbols package到nuget.org(.snupkg)
1.然后,请参阅此文档,将visual studio配置为使用NuGet.org作为符号源(在添加符号服务器https://symbols.nuget.org/download/symbols时使用此值)
dwbf0jvd3#
我也遇到了类似的问题--想(在公司内部)导出一个完整的nuget库,包括源代码和调试代码的选项。
我尝试了所有的排列组合
没有一个能像预期的那样工作,要么是源代码被反编译而不是原始的;没有智能感知文档;找不到符号;或者它们是在原始的nuget lib源目标中找到的,所以它只在我的DEV机器上工作,甚至直到原始源被更改。
最后,对我起作用的方法非常简单:)csproj PropertyGroup with
<GenerateDocumentationFile>True</GenerateDocumentationFile>
用于IntelliSense文档<EmbedAllSources>true</EmbedAllSources>
用于共享源<DebugType>Embedded</DebugType>
用于共享调试符号Nuget打包和推送到本地网络驱动器也很简单:
dotnet pack -c Release -o .
dotnet nuget push .\<package_name>.nupkg --source <network_location>
希望它能帮助其他人。