使用32位或64位dll编译.net应用程序

时间:2010-08-17 21:44:00

标签: vb.net 32bit-64bit sharpsvn

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

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

如何在不维护项目的两个副本的情况下编译应用程序的32位和64位版本?

2 个答案:

答案 0 :(得分:1)

使用x86平台(而不是任何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事件并选择所需的程序集。不过,我不知道这是不是一个好主意。

答案 1 :(得分:0)

从描述中可以看出,您的vb.net应用程序是使用Any CPU选项构建的,这意味着它将在64位计算机上作为64位应用程序运行。在这种情况下,它不会加载32位DLL。

您应该能够将其更改为以32位运行,而不是尝试同时使用32位和64位版本。更简单的部署。在项目属性构建选项卡下,选择x86