【问题标题】:Show source code of my nuget显示我的 nuget 的源代码
【发布时间】:2017-08-22 15:30:58
【问题描述】:

我和我的团队构建了我们在许多项目中使用的自己的框架。我们曾经将框架的项目包含在我们所有其他项目中,但后来我们决定将我们的框架放入我们的 nuget 服务器上的 nuget 包宿主中,这样我们就可以在开发过程中更轻松地进行版本控制和传播我们的框架。

一切都运行良好,但有一些明显的副作用。

Visual Studio 无法直接查看 nuget 的 dll 本身,因此例如 VS 搜索引擎无法查找我的 nuget 中存在的函数。 出于同样的原因,我的项目中再也看不到我们框架的源代码,只显示了元数据。

我了解 nuget 包不显示其自己的源代码是正常行为,但我想知道是否可以将 nuget 包设置为“受信任模式”,以便 Visual Studio 能够搜索它里面的函数和开发人员可以直接查看源代码(当然不能编辑它)。

非常感谢。

【问题讨论】:

    标签: .net visual-studio nuget


    【解决方案1】:

    这样 Visual Studio 将能够搜索其中的功能,并且开发人员能够直接查看源代码(当然不能对其进行编辑)。

    如果我知道你是正确的,你想访问 nuget 包中的代码但无法编辑?如果是,您可以尝试创建符号包,允许消费者在 Visual Studio 调试器中单步执行您的包代码。

    我们的做法(和工作方式):

    1. 创建“*.symbols.nupkg”。

    2. 将符号包部署到 SymbolSource 服务器。

    3. 配置 IDE,包使用者可以在 Visual Studio 中将https://nuget.smbsrc.net/ 添加到您的符号源中。

    4. 使用 NuGet(来自我们的 SymbolSource 服务器)将所需的库添加到项目中。 调试。

    详细信息可以参考Creating symbol packages

    如果这些包不适合在 NuGet Gallery/SymbolSource 上发布,您可以将 *.nupkg 和 *.symbols.nupkg 文件放在网络共享上的 NuGet 本地源上。关于这个方法的细节,你可以参考类似的issue:

    Is it possible to host both regular and symbols packages in a NuGet local feed on a network share?

    此外,在这种情况下,您不必担心开发人员会编辑源代码,因为所有包都下载到本地包文件夹中,编辑不会影响网络共享上的源代码,直到您重新发布它.

    更新详情:

    你应该添加一个断点并按 F11 进入源代码:

    按F12更新查看dll中的源代码:

    根据MSDN documentation

    调试器在以下位置查找源文件:

    >1. Files that are open in the IDE of the Visual Studio instance that launched the debugger.
    
    >2. Files in the solution that is open in the VS instance.
    
    >3. Directories that are specified in the "Common Properties" / "Debug Source Files" page in the properties of the solution.
    
    >4. The source information of the .pdb of the module. This can be the location of the source file when the module was built, or it can be a command to a source server.
    

    所以如果你想直接F12访问dll文件中的源代码,你应该在解决方案中添加源代码。您可以在解决方案中创建一个新项目来存放源文件并将该项目添加为参考项目。这会使您的解决方案/项目变得混乱,但由于它将被检入源代码管理,所有团队成员都将能够自动调试源文件。

    此外,应该推荐ReSharper,您可以通过转到 ReSharper / Options / External Sources 来启用它,然后向上移动“Sources from symbol files”。然后在“来自符号文件的源”选项卡中,单击“高级”,您可以在其中映射源文件夹。

    【讨论】:

    • 感谢您的回答利奥。按照您的第二个链接,我可以通过手动将 src 添加到我的解决方案的“调试源文件”中进行调试,如答案第 2 点所述。但问题仍然存在。除了实际调试我的代码之外,我无法访问源代码(只有元数据),也无法使用 VS 引擎搜索我的包中的函数。这与 SymbolSource 服务器一样吗?
    • @ElMoZo,我创建了一个示例,它在我这边工作正常。你的意思是你不能进入源代码?您是否尝试使用项目引用而不是 nuget,以便确保可以单步执行源代码。我已经用一个简单的 jpg 文件更新了我的答案,你可以查看它的详细信息。
    • 我可以进入源代码,但只能在调试时进行(就像您在视频中所做的那样使用 F11)。但我无法在编码期间(当项目未在调试中运行时)或使用 Visual Studio 的搜索引擎(如 CTRL + , ).
    • @ElMoZo,感谢您的回复。如果您想在编码时通过 F12 访问源代码,您可以尝试在您的解决方案中创建另一个项目,将 DLL 源放入其中,然后从您的主项目中,将依赖项添加为项目引用而不是装配参考。或者,您可以使用工具 ReSharper。有关详细信息,请在答案中按 F12 检查更新检查 dll 中的源代码。
    • 您提供的通过 F12 访问源代码的解决方案在技术上似乎是我们在将框架放入 nuget 之前所做的事情......如果我们这样做,我们将不得不参考,一个用于 nuget 和一个用于带有源代码的辅助项目?
    猜你喜欢
    • 2010-10-18
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多