1

我有一个我们在这里编写的应用程序,它使用 SharpSVN 包装器用于 SVN。在过去的几年里,它为我们提供了很好的服务。但是,我们已经开始引入 64 位系统,我们的应用程序似乎无法访问这些系统上的 SharpSVN dll。

我已经下载了 SharpSVN dll 的 64 位版本,我想知道下一步该做什么。我无法阻止我的 32 位用户使用该应用程序,因此我需要能够为这两个平台进行编译。幸运的是,使用此应用程序,我们将 ntier 堆栈的不同层拆分为解决方案中的单独项目,因此我使用 SharpSVN dll 的业务层是独立的。

我将如何编译我的应用程序的 32 位和 64 位版本,而无需维护项目的两个副本?

4

2 回答 2

1

使用 x86 平台(而不是 Any CPU)构建您的工具,即使在 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 回答