Repository.Stage ("*") arroja una ObjectDisposedException

Realizo una etapa de todos los files en el repository de git para la confirmación, confirmo los cambios, luego verifico los cambios y modifico la confirmación, cambiando su post. Eche un vistazo a mi código:

if (this.isRepoInit) // Check if the repository has been initialized successfully { using (Repository repo = repository) { // Stage all files repo.Stage("*"); // Setup the commit author Signature author = new Signature(this.userData.AuthorName, this.userData.AuthorEmail, DateTime.UtcNow); Commit currCommit = repo.Commit("Temporary commit message", author); // Write our commit message StringBuilder sb = new StringBuilder(); Tree commitTree = repo.Head.Tip.Tree; Tree parentCommitTree = repo.Head.Tip.Parents.Single().Tree; TreeChanges changes = repo.Diff.Compare<TreeChanges>(parentCommitTree, commitTree); if (changes.Count() > 0) { string pluralFile = "file"; string pluralInsertion = "insertion"; string pluralDeletion = "deletion"; if (changes.Count() != 1) pluralFile = "files"; if (changes.Added.Count() != 1) pluralInsertion = "insertions"; if (changes.Deleted.Count() != 1) pluralDeletion = "deletions"; sb.AppendLine(string.Format("{0} {1} changed, {2} {3}(+), {4} {5}(-)", changes.Count(), pluralFile, changes.Added.Count(), pluralInsertion, changes.Deleted.Count(), pluralDeletion)); CommitOptions commitOptions = new CommitOptions() { AmendPreviousCommit = true, AllowEmptyCommit = false, PrettifyMessage = true, CommentaryChar = '#' }; // Try to commit. If it throws, we log it. try { Commit ammendedCommit = repo.Commit(sb.ToString(), author, commitOptions); Logger.Debug("Committed changes, id: " + ammendedCommit.Sha); } catch (EmptyCommitException) { Logger.Debug("Nothing changed. Skipping commit."); } catch (Exception e) { Logger.LogError("Error while committing: {0}", e.Message); } } } } 

No sé lo que está pasando aquí. Este es el callstack, si alguien lo quiere:

 [Edit] ERROR: An error occurnetworking: ObjectDisposedException at Void SafeHandle.DangerousAddRef(Boolean&): Safe handle has been closed CallStack: at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean& success) at System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success) at LibGit2Sharp.Core.NativeMethods.git_diff_index_to_workdir(DiffSafeHandle& diff, RepositorySafeHandle repo, IndexSafeHandle index, GitDiffOptions options) at LibGit2Sharp.Core.Proxy.git_diff_index_to_workdir(RepositorySafeHandle repo, IndexSafeHandle index, GitDiffOptions options) at LibGit2Sharp.Diff.BuildDiffList(ObjectId oldTreeId, ObjectId newTreeId, TreeComparisonHandleRetriever comparisonHandleRetriever, DiffModifiers diffOptions, IEnumerable`1 paths, ExplicitPathsOptions explicitPathsOptions, CompareOptions compareOptions) at LibGit2Sharp.Diff.Compare[T](DiffModifiers diffOptions, IEnumerable`1 paths, ExplicitPathsOptions explicitPathsOptions, CompareOptions compareOptions) at LibGit2Sharp.Repository.Stage(IEnumerable`1 paths, StageOptions stageOptions) 

En el método init de mi complemento que no está publicado aquí, tengo una línea que define el repository de variables . Es: this.repository = new Repository (Repository.Init (this.gameDirectory));

¿Pueden encontrar algún problema con mi código?

¿Por qué estás envolviendo eso en un using ? Esto huele a error Si está utilizando este patrón en otro lugar, entonces habría dispuesto el repository.

Por ejemplo, si está realizando:

 this.repository = new Repository(); using (var repo = repository) { // do something } using (var repo = repository) { // do something else } 

Entonces obtendría una exception en el segundo bloque, porque está intentando usar el repository después de haberlo eliminado, en virtud de salir del primer bloque en using .

No los envuelva using bloques. Simplemente haga el trabajo en contra de este this.repository y deséchelo cuando haya terminado y su complemento salga.

Alternativamente, puede hacer que su class sea IDisposable y disponer de su instancia de repository en su método de dispose .

IRepository cómo lo haga, no llame a los methods en un IRepository después de que ya lo haya eliminado.