РЕДАКТИРОВАТЬ: LINQPad снова поддерживает LibGit2Sharp из коробки (с LINQPad 5.10.02 - в бета-версии на момент написания). Никаких обходных путей теперь не требуется.
К сожалению, в LibGit2Sharp v0.22 это снова не работает. Этот пакет больше не содержит собственных двоичных файлов в подпапке ниже, где LibGit2Sharp.dll находится в / libs. Вместо этого они находятся в отдельном зависимом пакете NuGet, который полагается на исправление файла проекта. Поскольку LINQPad не использует файлы проекта, это не работает.
Вы можете обойти это, добавив метод инициализации, как предлагается в других ответах, чтобы заполнить переменную PATH местоположением собственной папки. Следующий код будет работать без изменений на любом компьютере с текущим LibGit2Sharp:
void Main()
{
... your query here...
}
static UserQuery()
{
const string pathEnvVariable = "PATH";
char slash = Path.DirectorySeparatorChar;
char pathSep = Path.PathSeparator;
// The correct native binary file is located under a folder ending in
// "windows\x86" or "windows\amd64" or "win7-x86\native" or "win7-x64\native".
// This may change in later LibGit2Sharp releases.
string nativeStem1 = $"{slash}windows{slash}{(IntPtr.Size == 8 ? "amd64" : "x86")}";
string nativeStem2 = $"{(IntPtr.Size == 8 ? "-x64" : "-x86")}{slash}native";
// Locate the root folder in the NuGet package. This contains folders for the
// main package (LibGit2Sharp) plus dependencies (LibGit2Sharp.NativeBinaries).
var nugetRoot = new FileInfo (typeof (Repository).Assembly.Location)
.Directory.Parent.Parent.Parent;
var nativeBinaryPath = nugetRoot
.GetFiles ("*.dll", SearchOption.AllDirectories)
.Single (d => d.DirectoryName.EndsWith (nativeStem1, StringComparison.OrdinalIgnoreCase) ||
d.DirectoryName.EndsWith (nativeStem2, StringComparison.OrdinalIgnoreCase))
.Directory
.FullName;
string currentPaths = Environment.GetEnvironmentVariable (pathEnvVariable);
if (!(pathSep + currentPaths + pathSep).ToUpperInvariant().Contains
(pathSep + nativeBinaryPath.ToUpperInvariant() + pathSep))
{
Environment.SetEnvironmentVariable (pathEnvVariable, currentPaths + pathSep + nativeBinaryPath);
}
}
Обратите внимание, что вам не нужно явно вызывать этот метод, потому что он находится в статическом конструкторе.
Другой обходной путь - опубликовать другой пакет LibGit2Sharp на NuGet, который включает собственные двоичные файлы в ожидаемых местах, где находится LibGit2Sharp.dll (NativeBinaries \ x86 \ git2-785d8c4.dll и NativeBinaries \ amd86 \ git2-785d8c4.dll) - скачать LibGit2Sharp 0.21.0.176 для примера.
person
Joe Albahari
schedule
09.10.2016