c# - 在项目中包含外部源代码进行调试
问题描述
我正在处理UA-.NetStandard-Sample
项目,我希望能够调试从中实现的代码,nuget packages
并在需要时对其进行一些更改。为了做到这一点,我想将UA-.NetStandard
图书馆的源代码作为对该项目的参考,但我并没有真正的工作经验.Net
,C#
我可以使用一些帮助。我在 Visual Studio 2017 中工作。
有没有人对如何做到这一点的最简单方法有任何建议?
先感谢您!
解决方案
正如 JonasH 在他们对您的问题的评论中提到的那样,SourceLink 可以提供帮助,但它需要包作者正确设置。如果他们不这样做,它不会帮助你。它也只是用于调试,如果您需要进行更改,它也无济于事。
这种进行更改的技术取决于您要调试和改进的项目是否易于构建(不需要奇怪的自定义脚本或环境)。但只要是这样,我所做的是:
- 克隆我旁边的仓库。例如,我有
c:\src\MyRepo
和c:\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 中发布的版本。
- 为启动整个工作的 repo 提交并创建 PR。
如果库由其他人开发/拥有,第 5 步,等待他们发布包含您更改的新版本的包,可能需要很长时间。如果这对您的方案不可接受,那么“最简单”的解决方案是分叉库、更改包名称并使用您的分叉,直到上游作者接受您的更改并发布新的包版本。
我建议不要使用您的更改对库进行私有构建,但保留原始包 ID,因为 NuGet 假定包是全局唯一且不可变的。如果包所有者最终创建了一个与您用于私有修复的版本相同的包,您可能会发现您的本地和/或 CI 构建有奇怪的行为,因为会有具有相同 id 和版本但不同的包内容,以及在特定构建中使用哪一个取决于机器状态、nuget 源配置、网络和服务器速度。非确定性构建是一个不好的地方。
推荐阅读
- python - 在包含来自不同 crate 的类型的 rust 结构上使用 pyo3 pyclass
- python - Forbiddenfruit 需要 Visual C++ 14.0
- apache-flink - 谈到 Flink 异步 IO 时,“容量”参数是什么?
- single-page-application - oneToMany JPA 春天
- postgresql - 如何在 PostgreSQL Auto Vaccum 中停止分析
- java - 需要优化的 Map(k,v) 例如 (long, long[]),以避免自动装箱
- r - group_by dplyr 返回单值后总结
- python - 当您无法访问启动线程的变量时,如何在 Python 中停止线程?
- typescript - VueJs typescript recursive child components(抛出 [Vue warn]: Unknown custom element)
- python - 使用 numpy 逐像素矢量化 2 个窗口图像集之间的误差计算