我有一个应用程序,我们在这里使用SharpSVN包装器为SVN编写。它在过去的几年中为我们提供了很好的服务。但是,我们已经开始引入64位系统,我们的应用程序似乎无法访问这些系统上的SharpSVN dll。
我已经下载了64位版本的SharpSVN dll,我想知道下一步该做什么。我无法阻止我的32位用户使用该应用程序,因此我需要能够为这两个平台进行编译。幸运的是,通过这个应用程序,我们将ntier堆栈的不同层分成了解决方案中的单独项目,因此我使用SharpSVN dll的业务层是独立的。
如何在不维护项目的两个副本的情况下编译应用程序的32位和64位版本?
答案 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
。