libgit2 / libgit2/libgit2sharp

Repository.Discover() throws exception in Release mode, but not Debug mode

未关闭
#2,122 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

主要语言
C#
星标
3.5k
派生
925
PR 合并指标
30 天内没有已合并 PR

描述

I'm making a VSIX extension that does Git operations, I ran into this issue while trying to get the corresponding repo for the active document. When testing in the LLVM repo, doing Repository.Discover() on the active file C:\Users\<my_user_name>\source\repos\llvm-project\clang\lib\Format\UnwrappedLineParser.cpp throws in Release mode, but on Debug mode it correctly gets the repository path of C:\Users\<my_user_name>\source\repos\llvm-project\.git\

Reproduction steps
  • Create Visual Studio Extension project and add a command, set build to Release mode
  • Within the command, get active document with DTE applicationObject = (DTE)await AsyncServiceProvider.GlobalProvider.GetServiceAsync(typeof(SDTE));
  • Get full file path with var filePath = applicationObject.ActiveDocument.FullName
  • Call var repoPath = Repository.Discover(filePath)
Expected behavior

repoPath holds the path of the repository

Actual behavior

Exception is thrown with the message The type initializer for 'LibGit2Sharp.Core.NativeMethods' threw an exception.

Version of LibGit2Sharp (release number or SHA1)

0.30.0

Operating system(s) tested; .NET runtime tested

Windows 11, .NET Framework 4.8

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

首先使用活动的 LLVM 源文件,通过 Repository.Discover(filePath) 重现 Visual Studio 扩展命令在 Release 模式下的失败。检查 NativeMethods 类型初始化器,并在使用 .NET Framework 4.8 的 Windows 11 上比较 Release 和 Debug 的行为。完成标准是 Repository.Discover 在 Release 构建中返回仓库路径且不抛出异常。

由索引模型根据 Issue 内容生成。

评估

技术栈
csharp, git
领域
tooling
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。