2009-07-03 17 views
12

Wyobraźmy sobie, że mam już złożony projekt .NET 3.5. Teraz chcę zbudować ten zestaw dla Silverlight, a ponadto utrzymywać jego wersję Silverlight przy minimalnym wysiłku.Kierowanie zarówno na .NET 3.5, jak i na Silverlight

Co jest nie do przyjęcia:

  • Stworzenie odrębnego projektu dla Silverlight zbudować

Jaka jest dopuszczalna:

  • Dodawanie dyrektyw niestandardowych pozwala mi kierować zarówno Silverlight lub .NET w zależności od np Właściwości MSBuild.
  • Dodawanie specjalnych konfiguracji kompilacji dla Silverlight
  • Dodawanie fragmentów #ifdef Silverlight/#endif do kodu źródłowego.
  • Generalnie każda inna modyfikacja .csproj/.cs.

W zasadzie chciałbym utrzymać jeden projekt, ale docelowo dwa ramy. Nie chcę utrzymywać dwóch osobnych projektów, ponieważ może to prowadzić do błędów, takich jak zapomnienie o dodaniu nowego pliku. Jeśli istnieje wiele projektów i duży zespół, jest to naprawdę ważne, aby wykluczyć takie błędy.

Jeśli jest to całkowicie niemożliwe, możliwe jest zastosowanie dowolnego rozwiązania zapewniającego podobne korzyści.

+0

pytanie jest niejasne. Czy chcesz zbudować zespół, a następnie użyć metod tego zespołu itp. W aplikacji Silverlight? Ponieważ większość twojej prawdziwej pracy w Silverlight odbywa się poprzez komunikację z webservices, nie jestem pewien, czy masz problem. Być może masz problem z tieringiem? Oznacza to, że masz poziomy, które nie mają wyraźnych definicji między nimi. – jcollum

+1

Silverlight to .NET 3.5. Wierzę, że masz na myśli Silverlight i WPF. Ponadto jest bardzo podobny do tego pytania: http://stackoverflow.com/questions/208123/what-is-the-best-practice-for-compiling-silverlight-and-wpf-in-one-project –

+1

Silverlight jest. NET 3.5? Wydaje się to niemożliwe, ponieważ jak już powiedziałeś, jego projekty odwołują się do różnych mscorlib. Co więcej, jest to zupełnie inna platforma wykonawcza ... –

Odpowiedz

8

Czy wykluczyliście także link do plików w projekcie z projektu Silverlight? To dość powszechne podejście do dzielenia implementacji między Silverlight i pełnym CLR. Sharing Code Between .NET and Silverlight Platforms

Ponadto, zgodnie z Justin Angel można odwołać się i korzystać z biblioteki klas Silverlight z pełnego CLR. Nie próbowałem tego sam, i pozostawia pewne pytania bez odpowiedzi, ale to sprawia, że ​​scenariusz jest prosty: http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx

+0

Czy istnieje narzędzie umożliwiające utrzymanie oryginalnego projektu i projektu Silverlight z linkami (lub przynajmniej linkami tam) zsynchronizowanymi automatycznie? –

+1

W programie Prism (http://compositewpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19170) znajduje się narzędzie Project Linker. Omówienie tutaj: http://www.global-webnet.net/blogengine/post/2009/01/10/Project-Linker-sharing-single-code-base-between-Silverlight-and-Desktop-applications.aspx – OdeToCode

+0

Świetne - Będę czekać na inne odpowiedzi, jeśli takie będą. Na razie wydaje się, że to najlepsza opcja, jaką mam ... –

0

Musisz mieć dwa projekty, ponieważ odwołania do mscorlib są różne dla obu platform.

Sprawdź to pytanie: http://www.google.ca/search?hl=en&q=targetting+silverlight+and+wpf&meta=&aq=f&oq=

Jeśli wszystko, co chcesz zrobić, to mieć regularny starą bibliotekę .NET udostępnionego między nimi, to proponuję utworzenie dwóch projektów (jedna dla Silverlight, jeden dla regularnego) i włączając te same pliki w obu projektach. Jest to o wiele łatwiejsze do zrozumienia dla innych programistów.

+0

Czy mogę wyłączyć \ włączyć niezbędne opcje, np. with Condition = "'$ (SilverlightBuild)"! =' '"? –

+1

Możesz, jeśli chcesz. Ale nie musisz, ponieważ są one włączone do dwóch plików projektu. np. Każdy plik .csproj #defines SL lub WPF lub NET35. Każde csproj zawiera/wyklucza dowolne pliki/biblioteki, których potrzebuje. Również nie łącz plików, umieść csproj w tym samym katalogu i po prostu "Dodaj -> Istniejący element". – Ray

+0

Dotyczące "czy mogę wyłączyć" - mam na myśli "czy mogę utrzymać pojedynczy projekt przy użyciu atrybutu MSBuild Condition?" –

1

Zgadzam się ze Scottem. Oszczędź sobie dużo bólu. Dwa projekty, które dzielą tę samą bazę kodów, są drogą do zrobienia. Będziesz go potrzebować do korzystania z VStudio w obu środowiskach, do używania różnych bibliotek, do włączania/exculde plików, aby robić tak wiele rzeczy ... łatwo!

Powód do dwóch projektów daleko przeważać wymówek za posiadanie jednego.

+0

Proszę przeczytać mój komentarz do postu Scotta. –

0

Myślę, że to, co musisz zrobić, to ustawić to poprawnie. Twój kod Silverlight powinien być tylko dla interfejsu użytkownika i komunikacji z zapleczem usług WCF. Te usługi uruchomią Twój kod .NET 3.5 (kod, który chcesz udostępnić). W ten sposób masz również dzielenie i n-tier.

Jeśli wykonujesz ciężkie obliczenia po stronie klienta w kodzie Silverlight, a następnie przesyłasz to na serwer (i prawdopodobnie na db), to myślę, że otwierasz lukę bezpieczeństwa.

Nie podano ważnego powodu, dla którego oddzielny projekt musiałby uzyskać dostęp do kodu w projekcie Silverlight.

+0

Jestem świadomy architektury aplikacji Silverlight \ RIA i zadaję to pytanie, ponieważ wiem dokładnie, czego potrzebuję. Tak więc ogólna rada jest dobra, ale tutaj w ogóle nie pasuje. –

+0

Istnieje wiele powodów, aby wykonywać skomplikowane obliczenia na klientach - np. wyobraź sobie, że chciałbym uporządkować dane (powiedzmy 1 MB) lokalnie. Dostarczyłem go już klientowi, a koszt jego sortowania jest znacznie mniejszy niż koszt uzyskania posortowanych danych bezpośrednio z serwera. –

+0

To tylko przykład. Kolejną jest program podobny do Paint.NET. Wiele efektów filtrowania musi być w tym przypadku obsługiwane lokalnie. P.S. Nie mów mi o akceleracji Silverlight 3.0 i akceleracji GPU, jestem tego świadomy. Krótko mówiąc, potrzebuję dokładnej odpowiedzi. –

Powiązane problemy