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

Vb.net 使用32位或64位dll编译.net应用程序,vb.net,32bit-64bit,sharpsvn,Vb.net,32bit 64bit,Sharpsvn,我有一个我们在这里编写的应用程序,它使用SharpSVN包装器进行SVN。在过去几年中,它为我们提供了良好的服务。但是,我们已经开始引入64位系统,我们的应用程序似乎无法访问这些系统上的SharpSVN dll 我已经下载了64位版本的SharpSVN dll,我想知道下一步该怎么做。我无法阻止我的32位用户使用该应用程序,因此我需要能够为这两种平台进行编译。幸运的是,在这个应用程序中,我们将ntier堆栈的不同层拆分为解决方案中的不同项目,这样我的业务层就可以独立使用SharpSVN dll了

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

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


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

使用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事件并选择要在其中使用的程序集。不过,我不知道这是否是个好主意。

使用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事件并选择要在其中使用的程序集。不过,我不知道这是否是个好主意。

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


与其尝试同时使用32位和64位版本,不如将其更改为以32位运行。更简单的部署。在“项目属性生成”选项卡下,从描述中选择
x86

,听起来您的vb.net应用程序是使用
任意CPU
选项生成的,这意味着它将作为64位计算机上的64位应用程序运行。在这种情况下,它不会加载32位DLL


与其尝试同时使用32位和64位版本,不如将其更改为以32位运行。更简单的部署。在“项目属性生成”选项卡下,选择
x86

,然后我是否需要维护项目的两个副本?一个使用32位,另一个用于64位?@fizch,否。假设没有特定的理由需要64位应用程序,您只需要一个32位版本,可以在任何一种环境中运行。@Mark,更改我的业务层项目都不起作用。当我将解决方案中的所有项目更改为x86时,它根本不会启动应用程序。它一直说应用程序停止响应。@fizch,这似乎有点奇怪。它在32位平台上也停止工作了吗?当时我没有尝试在32位平台上安装。好问题。我只是试着编译它并在我的32位系统上运行,它成功地运行了。然后我需要维护两个项目副本吗?一个使用32位,另一个用于64位?@fizch,否。假设没有特定的理由需要64位应用程序,您只需要一个32位版本,可以在任何一种环境中运行。@Mark,更改我的业务层项目都不起作用。当我将解决方案中的所有项目更改为x86时,它根本不会启动应用程序。它一直说应用程序停止响应。@fizch,这似乎有点奇怪。它在32位平台上也停止工作了吗?当时我没有尝试在32位平台上安装。好问题。我只是试着编译它并在我的32位系统上运行,它成功地运行了。因为SharpSVN是用.Net编写的,所以我有一个对dll的引用。PInvoke方法不是用于非托管代码吗?如下所示,将项目更改为x86平台会导致应用程序在加载期间挂起。对不起,我想这取决于您的排序。作为对马克·威尔金斯的另一个回答的回应,因为SharpSVN是用.Net编写的,所以我有一个对dll的引用。PInvoke方法不是用于非托管代码吗?如下所示,将项目更改为x86平台会导致应用程序在加载期间挂起。对不起,我想这取决于您的排序。回应马克·威尔金斯的另一个回答。