2012-02-27 15 views
11

Mam bibliotekę C#, która jest wywoływana przez różnych klientów (zarówno 32-bitowych, jak i 64-bitowych). Do tej pory był skompilowany jako AnyCPU, więc nie było problemów.Jak rozpowszechniać zarówno wersje 32-, jak i 64-bitowe biblioteki

Ostatnio dodałem zależność od biblioteki SQLite .NET, która ma 32- i 64-bitowe smaki (ale nie AnyCPU). Tak więc, teraz muszę mieć 2 kompilacje - dla obu bitów.

W przeszłości widziałem inne biblioteki (MS SQL Compact przychodzi na myśl), które miały schemat, w którym pojedynczy zestaw .NET miałby foldery Private\amd64 i Private\x86 w folderach z odpowiednimi natywnymi bibliotekami w nich i to zadzwoniłbym do każdego w razie potrzeby.

Czy to podejście sprawdza się w mojej sytuacji? Czy istnieje dokumentacja dotycząca sposobu wdrożenia? Czy są wymagane zmiany kodu, czy jest to technika dystrybucji?

Odpowiedz

6

Istnieje kilka sposobów, można sobie z tym poradzić. Wymagane są zmiany kodu (małe) dla pierwszych trzech podejść:

A. Możesz zmodyfikować ścieżkę, aby wskazywała folder specyficzny dla platformy podczas uruchamiania aplikacji. Następnie .NET automatycznie załaduje lokalne pliki DLL z tego folderu.

B. Możesz zapisać się do zdarzenia AssemblyResolve, a następnie wybrać zespół oparty na platformie.

Zobacz blog Scotta Biliasa na ten temat: http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-dlls/. Zauważ, że on kończy preferować podejście A.

"W skrócie, rozwiązaniem jest oszukać program ładujący! Odniesienie do pliku p4dn.dll, który nie istnieje, i użycie zdarzenia AssemblyResolve w celu przechwycenia obciążenia i przekierowania go do poprawny montaż rozmiaru bitowego. "

C. Użyj specyficznego dla platformy zestawu exe.configs i elementu codebase, aby określić miejsca montażu. Twoja instalacja zainstaluje poprawną na podstawie platformy.

http://msdn.microsoft.com/en-us/library/4191fzwb.aspx

D. Napisz dwie konfiguracje jeden dla 32-bitowych i jeden dla 64-bitowej, a następnie tylko zainstalować odpowiednie pliki dla platformy.

Powiązane problemy