компиляция приложения .net с 32-битной или 64-битной DLL - PullRequest
1 голос
/ 18 августа 2010

У меня есть приложение, которое мы написали здесь на работе, которое использует оболочку SharpSVN для SVN. Это хорошо послужило нам в последние несколько лет. Однако мы начали вводить 64-битные системы, и наше приложение не может получить доступ к dll SharpSVN в этих системах.

Я скачал 64-битную версию dll SharpSVN, и мне интересно, что делать дальше. Я не могу помешать моим 32-битным пользователям использовать приложение, поэтому мне нужно иметь возможность компилировать для обеих платформ. К счастью, с помощью этого приложения мы разделили различные уровни стека ntier на отдельные проекты в рамках решения, поэтому мой бизнес-уровень, использующий dll SharpSVN, сам по себе.

Как бы мне скомпилировать 32-битную и 64-битную версию моего приложения без необходимости поддерживать две копии проекта?

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Создайте свой инструмент на платформе x86 (в отличие от любого процессора), и он будет загружен как код x86 даже в 64-битных системах.

Или вы можете сделать что-то вроде

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 и выбрать, какую сборку вы хотите в этом. Хотя я не знаю, хорошая ли это идея.

0 голосов
/ 18 августа 2010

Из описания звучит, как будто ваше приложение vb.net построено с опцией Any CPU, что означает, что оно будет работать как 64-битное приложение на 64-битной машине. В этом случае он не будет загружать 32-битную DLL.

Вместо того, чтобы пытаться использовать как 32-битную, так и 64-битную версию, вы должны просто изменить ее на 32-битную. Упрощенное развертывание. На вкладке сборки свойств проекта выберите x86.

...