在项目中包含外部源代码进行调试

Posted

技术标签:

【中文标题】在项目中包含外部源代码进行调试【英文标题】:Including external source code in the project for debugging 【发布时间】:2021-12-22 21:38:51 【问题描述】:

我正在使用UA-.NetStandard-Sample 项目,我希望能够调试从nuget packages 实现的代码,并在需要时对其进行一些更改。为了做到这一点,我想包含来自UA-.NetStandard 库的源代码作为对这个项目的参考,但我对使用.NetC# 并没有真正的经验,我可以使用一些帮助。我在 Visual Studio 2017 中工作。

有人对最简单的方法有什么建议吗?

提前谢谢你!

【问题讨论】:

看看source link。但是,即使这样,调试体验也不如本地项目。 【参考方案1】:

正如 JonasH 在对您的问题的评论中提到的那样,SourceLink 可以提供帮助,但它需要包作者正确设置。如果他们不这样做,它不会帮助你。也只是调试用的,如果需要修改也无济于事。

这种进行更改的技术取决于您要调试的项目并改进构建简单(不需要奇怪的自定义脚本或环境)。但只要是这样,我要做的就是:

    克隆我旁边的repo。例如,我有c:\src\MyRepoc:\src\TheLibrary。 暂时将任何<PackageReference Include="TheLibrary" Version="1.2.3" /> 更改为<ProjectReference Include="..\..\TheLibrary\path\to\TheLibrary.csproj" /> 如果您使用 Visual Studio,暂时将 TheLibrary 添加到您的解决方案有助于改善开发体验 像在同一个解决方案中一样调试和开发项目。 完成开发后,提交、推送并为 TheLibrary 创建 PR。由于您没有在此 repo 中进行任何临时更改,因此无需做任何额外的事情 等到 TheLibrary 合并您的 PR 并发布新的软件包版本。 撤消您在第 2 步中所做的临时更改,并将软件包版本增加到第 5 步中发布的版本。 提交并为您的代码库创建 PR 以启动整个工作。

如果库由其他人开发/拥有,第 5 步,等待他们发​​布包含您更改的新版本的包,可能需要很长时间。如果这对您的方案不可接受,那么“最简单”的解决方案是分叉库、更改包名称并使用您的分叉,直到上游作者接受您的更改并发布新的包版本。

我建议不要使用您的更改来私有构建库,但保留原始包 ID,因为 NuGet 假定包是全局唯一且不可变的。如果包所有者最终创建了一个与您用于私有修复的版本相同的包,您可能会发现您的本地和/或 CI 构建有奇怪的行为,因为会有具有相同 id 和版本但不同的包内容,以及在特定构建中使用哪一个取决于机器状态、nuget 源配置、网络和服务器速度。非确定性构建是一个不好的地方。

【讨论】:

以上是关于在项目中包含外部源代码进行调试的主要内容,如果未能解决你的问题,请参考以下文章

ReSharper - 在代码检查中包含外部源文件

PyCharm 在项目中包含和修改外部库

如何在我的 gradle java 项目中包含外部 .jar? [复制]

在 cpack 输出中包含外部库

配置 sbt 项目以在“sbt run”中包含外部 Main 方法

如何在 WPF 应用程序中包含外部字体而不安装它