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

标签 visual-studio-2015 nuget

首先,我对 NuGet 还是很陌生。我在工作中开发了许多内部 C# 桌面应用程序,它们之间共享一些通用代码。我一直在从使用项目引用切换到创建私有(private) NuGet 包并将它们托管在位于共享网络文件夹中的本地源中。我现在只用了几天,但我已经成功地将我的一些库项目变成了包,并在迄今为止的其他项目中使用它们。

问题是,虽然我可以在依赖它们的其他解决方案中使用这些包提供的代码,但我没有获得 IntelliSense 支持或在包本身内进行调试的能力。事实证明,只有组装好的 DLL 分布在普通包中,根据我从网上搜索的信息,我还需要创建符号包,其中包含 IntelliSense 和调试所需的文件。

当仅使用网络共享文件夹作为本地提要时,我该如何做到这一点 - 同时使用常规包和符号包? 许多在线答案建议使用单独的符号服务器。但是,我无法将此代码公开发布到 symbolsource.org,而且我目前无法从我的雇主那里获得一台服务器来托管一个服务器(这消除了 NuGet.Server、ProGet 等解决方案)。我正在寻找的东西是否可能?

我已经查看了有关创建 symbol packages 的官方文档和 local feeds ,还有这个related question .但这些都没有我正在寻找的信息。

编辑:通过记住在构建时打开 XML 文档生成,使用来自 this question 的信息,我确实获得了对我的包代码工作的 IntelliSense 支持。 .不过,仍然不确定调试支持。

最佳答案

How can I do this - using both regular packages and symbol packages - when using only a network share folder as a local feed?


恐怕答案是否定的。当我在网络共享上的 NuGet 本地源中同时托管常规包和符号包时,然后将该包安装到我的测试项目中,进行调试,Visual Studio 无法加载 .pdb 文件。因为 .pdb 文件包装在符号包中,所以 Visual Studio 无法直接访问它。所以建议是“使用单独的符号服务器。”。
由于您无法将此代码公开发布到 symbolsource.org 并且目前无法从您的雇主那里获得一台服务器来托管一个服务器,因此我想为您提供一个 轻量化解决方案这里:
  • Put the pdb and source code file in the NuGet package alongside the dll .
  • 将源代码添加到引用包的解决方案的调试源文件中。

  • 这意味着您将能够单步执行代码并查看异常,但您可能必须在磁盘上找到一个文件并打开它,然后才能设置断点。显然,您需要注意源的版本是否正确。
    步骤 1 的更多详细信息:
    如果您当前在没有 Nuspec 的情况下打包,则需要创建一个 Nuspec,然后将 pdb 添加到 lib 文件夹中的文件列表和 src 文件夹中的源文件。 “NuGet 规范”可能是一个有用的命令,用于生成 NuGet docs 中定义的初始规范。 .下面是我的 .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 的社区版。现在。

    关于visual-studio-2015 - 是否可以在网络共享的 NuGet 本地源中同时托管常规包和符号包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45620764/

    相关文章:

    c# - Nuget DLL hell : Could not load file or assembly System. 运行时

    c# - 'ILoggerFactory' 不包含 'AddConsole' 的定义

    msbuild - 使用 Nuget 将脚本添加到 Visual Studio 中的解决方案文件夹

    visual-studio-2015 - Visual Studio 组件缓存过期

    sql-server - SQL71501 - 如何抑制此错误

    nuget - Nuget导致建筑问题

    c++ - vcruntime140d_app.dll和vcruntime140d.dll之间的区别

    c++ - MFC 列表框中的复选框在 VS2015 中显示不同

    c# - 在其他文件夹中使用共享程序集信息创建 nuget 包

    Teamcity NuGet 存储库损坏