1

ここで、SVN 用の SharpSVN ラッパーを使用するアプリケーションを作成しました。過去数年間、それは私たちによく役立ってきました。ただし、64 ビット システムの導入を開始したため、アプリケーションはこれらのシステムで SharpSVN dll にアクセスできないようです。

SharpSVN dll の 64 ビット バージョンをダウンロードしましたが、次に何をすべきか迷っています。32 ビット ユーザーがアプリケーションを使用するのを止めることはできないため、両方のプラットフォーム用にコンパイルできる必要があります。幸いなことに、このアプリケーションでは、ntier スタックのさまざまなレイヤーをソリューション内の個別のプロジェクトに分割するため、SharpSVN dll を利用する私のビジネス レイヤーは独立しています。

プロジェクトの 2 つのコピーを維持することなく、アプリケーションの 32 ビット バージョンと 64 ビット バージョンの両方をコンパイルするにはどうすればよいでしょうか?

4

2 に答える 2

1

(任意の CPU ではなく) x86 プラットフォームを使用してツールをビルドすると、64 ビット システムでも x86 コードとして読み込まれます。

または、次のようなことができます

class SharpSvn64 {
    [DllImport("sharpsvn64.dll")] extern public static void DoSomething();
}

class SharpSvn32 {
    [DllImport("sharpsvn32.dll")] extern public static void DoSomething();
}

class SharpSvn {
    static readonly bool Is64 = (IntPtr.Size == 8);

    void DoSomething() {
        if (Is64)
            SharpSvn64.DoSomething();
        else
            SharpSvn32.DoSomething();
    }
}

編集: SharpSVNは管理されているため、PInvokeは答えではないため、x86実行可能ファイルを構築することがおそらく方法です。または、インターフェイスが同一である場合は、AddDomain.AssemblyResolve イベントをサブスクライブして、その中で必要なアセンブリを選択することを回避できます。しかし、これが良いアイデアかどうかはわかりません。

于 2010-08-17T22:00:13.057 に答える
0

説明から、vb.net アプリケーションはAny CPUオプションを使用してビルドされているように聞こえます。つまり、64 ビット マシン上で 64 ビット アプリケーションとして実行されます。その場合、32 ビット DLL は読み込まれません。

32 ビット バージョンと 64 ビット バージョンの両方を使用しようとするのではなく、32 ビットとして実行するように変更するだけでよいはずです。よりシンプルな展開。プロジェクト プロパティのビルド タブで、 を選択しますx86

于 2010-08-17T22:01:21.240 に答える