在网络共享中的NuGet本地源中,是否可以同时托管常规和符号包?

9
首先,我对NuGet还非常陌生。我在工作中开发了许多内部的C#桌面应用程序,并且它们之间共享了一些公共代码。我一直在从使用项目引用转换为创建私有NuGet包并将它们托管在位于共享网络文件夹中的本地源中。我只开始尝试了几天,但到目前为止,我已经成功地将我的一些库项目转换成了包,并在其他项目中使用它们。
问题是,虽然我可以在依赖这些包的其他解决方案中使用这些包提供的代码,但我无法获得IntelliSense支持或在包内进行调试。事实证明,普通包中只分发已组装的DLL,并且从我从网上搜索到的内容来看,我还需要创建包含所需文件以供IntelliSense和调试使用的符号包。
当仅使用网络共享文件夹作为本地源时,我如何同时使用常规包和符号包?许多在线答案建议使用单独的符号服务器。但是,我不能将此代码公开发布到symbolsource.org,并且我目前也无法从雇主那里获得一个用于托管服务器的服务器(这消除了NuGet.Server、ProGet等解决方案)。我正在寻找的东西甚至可能吗?
我已经查看了有关创建符号包和本地源的官方文档,以及此相关问题。但是,它们都没有我正在寻找的信息。
编辑:我通过记得在构建时打开XML文档生成来使我的包的代码获得了IntelliSense支持,使用了此问题中的信息。但仍不确定调试支持是否可行。
1个回答

8
当仅使用网络共享文件夹作为本地源时,我如何同时使用常规包和符号包?很遗憾,答案是否定的。当我将常规包和符号包都托管在NuGet本地源中,并将该包安装到我的测试项目中后,进入调试模式,Visual Studio无法加载.pdb文件。因为.pdb文件被包含在符号包中,Visual Studio无法直接访问它。所以建议您“使用单独的符号服务器”。由于您无法公开将此代码发布到symbolsource.org,也无法从雇主那里获取用于托管服务器的服务器,因此我想在这里提供一个“轻量级解决方案”:
1. 将pdb和源代码文件放在与dll同级的NuGet包中。 2. 为引用该包的解决方案添加源代码到调试源文件中。
这意味着您将能够逐步执行代码并查看异常,但您可能需要在设置断点之前找到磁盘上的文件并打开它。显然,您需要小心确保源代码是正确的版本。
更详细的步骤1说明: 如果您当前没有Nuspec进行打包,则需要创建一个Nuspec,然后将pdb添加到lib文件夹中的文件列表中,并将源文件添加到src文件夹中。 "NuGet spec"命令可能有助于生成最初的规范,如NuGet文档中所定义的那样。以下是我的.nuspec文件,您可以检查它:
<?xml version="1.0"?>
  <package >
    <metadata>
     <id>MyTestPackage</id>
     <version>1.0.3</version>
     <authors>Admin</authors>
     <owners>Admin</owners>
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
     <description>Package description</description>
     <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
     <copyright>Copyright 2017</copyright>
     <tags>Tag1 Tag2</tags>
   </metadata>

   <files>
     <file src="bin\Debug\MyTestPackage.dll" target="lib\Net46" />
     <file src="bin\Debug\MyTestPackage.pdb" target="lib\Net46" />
     <file src="Class1.cs" target="src" />
   </files>
</package>

步骤2的详细信息:

当您打开一个解决方案时,在“解决方案”上右键单击,选择“属性”...“常规属性”...“调试源文件”,然后添加相关二进制引用的根源目录

enter image description here

或参见MSDN。请注意,您不能在调试时打开解决方案属性。

使用.nuspec中的这些设置,您只需要在网络共享的NuGet本地存储库中设置此常规包。安装此包,然后您可以在包内部进行调试。

此外,SymbolSource发布了一个名为SymbolSource Server Basic的社区版。


我担心这就是情况...感谢您的确认。我看到实际上在GitHub上有一个开放问题,用于改进符号处理的NuGet,也许使用可移植PDB,所以希望类似的东西最终能够实现并消除使用服务器调试私有包的要求。 - Knowledge Cube

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接