6

NuGet を使用した LINQPad バージョンがあり、libgit2sharp を追加しましたが、これは別の (ネイティブ) dll に依存しています。

私はもう試した:

  • それらを私のシステムディレクトリにコピーします。
  • パスに追加した別のディレクトリにそれらを配置します。
  • それらを LINQPads プラグイン ディレクトリに配置します。
  • クエリを実行するときにそれらをコピーしますAssembly.GetExecutingAssembly().Location

このライブラリを使用してログを読み取ろうとしているだけで、LINQPad でスニペットとして保持するのは適切ですが、他のすべてが失敗した場合はコンソール アプリケーションにすることができると思います。

LINQPad で libgit2sharp を使用した人がいて、それらをうまく連携させる方法を説明できますか?

4

6 に答える 6

7

パスにあるフォルダーにdllを配置するか、dllの場所をパスに追加すると機能するはずです(そして私にとっては機能します)

変更が反映されていない可能性があります。LinqPad を閉じて再度開くか、失敗した場合は、ログアウトしてウィンドウに戻ります。

于 2013-06-07T12:58:40.583 に答える
3

素晴らしい @mbx が立ち上がって、私たちがこれを実現するのを助けてくれました

彼のおかげで、LibGit2Sharp NuGet パッケージ ( v0.15.0 ) の次のリリースは、LinqPad 内から直接動作します。

アップデート:

LibGit2Sharp NuGet v0.14.1パッケージにはこの修正が含まれており、ダウンロードできるようになりました。

于 2013-09-21T14:58:46.103 に答える
3

以下を使用して、実行時に関連するパスを追加することになりました。

void SetUpNativeBinaries(){
    var appDataLocal = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
    var packageVersion = "LibGit2Sharp.0.14.0.0";// may read from PackageInfo
    var processorArchitecture = IntPtr.Size==8?"amd64":"x86";
    var libgitNativeBinaryPath = Path.Combine(appDataLocal, "LINQPad", "NuGet", "LibGit2Sharp", packageVersion, "NativeBinaries", processorArchitecture);
    libgitNativeBinaryPath.Dump();

    var pathEnvVariable = "PATH";
    var currentPaths = Environment.GetEnvironmentVariable(pathEnvVariable);
    var combinedPaths = String.Format(
        System.Globalization.CultureInfo.InvariantCulture,
        "{0}{1}{2}",
        libgitNativeBinaryPath,
        Path.PathSeparator,
        currentPaths);

    Environment.SetEnvironmentVariable(pathEnvVariable, combinedPaths);
}

それを「C#プログラム」として保存すると、すぐに開始できます。

void Main()
{
    SetUpNativeBinaries();
    var repoWorkingDir = @"C:\temp\libgit2_repo";
    var repo = new Repository(repoWorkingDir);

    repo.Config.Dump();
    repo.Branches.Dump();
    repo.Index.RetrieveStatus().Dump();
    //...
}

更新 解決済みの問題があり、リリース 0.14.1.0 以降に修正が同梱されています

于 2013-09-18T09:01:19.970 に答える
2

LibGit2Sharp NuGet パッケージのバージョン 0.22.0 と LINQPad のバージョン 5.08.01 では、そのままの NuGet パッケージもmbx の回答も機能しませんでした。

mbx's answer のメソッドを次のように変更しました。

void SetUpLibGit2SharpNativeBinaries()
{
    string libGit2SharpNativeBinariesPath = @"C:\Users\kevitt\AppData\Local\LINQPad\NuGet.FW46\LibGit2Sharp\LibGit2Sharp.NativeBinaries.1.0.129\libgit2\windows\x86";

    string pathEnvVariable = "PATH";
    string currentPaths = Environment.GetEnvironmentVariable(pathEnvVariable);

    IEnumerable<string> paths = currentPaths.Split(';');

    if (!paths.Contains(libGit2SharpNativeBinariesPath))
    {
        var combinedPaths = String.Format(
            System.Globalization.CultureInfo.InvariantCulture,
            "{0}{1}{2}",
            libGit2SharpNativeBinariesPath,
            Path.PathSeparator,
            currentPaths);

        Environment.SetEnvironmentVariable(pathEnvVariable, combinedPaths);
    }
}

これは、文字列 variable に割り当てられた値で少なくとも自分の Windows ログイン名を自分のものに置き換える必要があるため、このままでは他の人にはほとんど確実に機能しないことに注意してくださいlibGit2SharpNativeBinariesPath

また、libGit2SharpNativeBinariesPath(mbx のコードのlibgitNativeBinaryPath文字列に対応する) は、mbx のコードのように (簡単に) 生成できるものではないように思われるため、パスを自分で決定する必要がある場合があります。

于 2016-10-05T20:55:56.060 に答える