Visual Studio a potrzeba .NET Framework na kompie

Długo się zastanawiałem, czy na pewno w tym dziale zacząć ten wątek, bo problem w sumie bardziej dotyczy programu niż samego programowania, ale ów program silnie jest związany z programowaniem, więc chyba tutaj szybciej otrzymam odpowiedź.

Zauważyłem że programy napisane w kombajnie Microsoftu Visual Studio, potrzebują do działania zainstalowany pakiet .NET Framework w wersji…z moich obserwacji wynika, że to zależy czy nasz program był napisany w VS 2008, VS 2005 czy jeszcze innym. I o ile program napisany w Visual C# powinien wykorzystywać .NET Framework, o tyle nie rozumiem czemu programy napisane w Visual C++ również tego pakietu potrzebują.

Dlaczego zwykły program napisany w języku C++ za pomocą narzędzia z Visual Studio również wykorzystuje Framework’a?

Inne pytanie: czy nie da się jakoś obejść tego, by program napisany za pomocą Visual C++ odpalić na innym kompie i nie musieć martwić się, czy ma on zainstalowany pakiet .NET Framework i czy w wersji która pasuje do mojego programu? Bo Visual fajny kombajn, ale denerwujące jest to że muszę innym kazać instalować Framework’a, żeby program poszedł.

Proponuje poszukac w opcjach projektu, tam jest do wyboru wersja .NET Framework, ktora bedzie wykorzystywana.

Ja nie bawie sie w Visual C++, wiec bede wdzieczny jesli ktos mnie poprawi w przypadku bledy, ale Visual C++ domyslnie tworzy w odmianie tego jezyka o nazwie C++/CLI. jest to o tyle ciekawe o ile jest to jedyna mozliwosc (o jakiej wiem…) na polaczenie kodu zarzadzalnego i niezarzadzalnego w jednej aplikacji .NET.

zgaduje, ze gdzies w opcjach powinno dac sie odpowiednie rzeczy ustawic. bo np jesli plik ma rozszerzenie .c, to Visual automatycznie przestawia sie na prace z tym jezykiem.

A który w ogóle typ projektu wybierasz? Oczywiście, że można pisać w czystym C/C++…

Tych dwóch najczęściej:

Visual C++ --> Win32 --> Win32 Console Application

Visual C++ --> Win32 --> Win32 Project

Czasem również:

Visual C++ --> CLR --> Windows Forms Application

//Mam nadzieje, że o to Ci chodziło :lol:

To przecież tylko ostatni korzysta z frameworka. Możesz też po prostu wybrać pusty projekt z sekcji „General”. I zauważ też, że Visual Studio ma domyślnie dwie konfiguracje – Debug i Release.

No może tylko ostatni korzysta z frameworka, ale każdy program napisany w dowolnym z powyższych projektów nie działa dopóki nie mam zainstalowanego frameworka i to mnie trochę dziwi:/

A skompilowałeś jako Release?

Miałem ustawione jako Debug. A tak w ogóle to co chodzi? jaka jest różnica między Debug a Release?

no to wszystko jasne. sprobuj na Release i powiedz jak dziala.

roznica jest taka, ze wersja Debug zawiera mnostwo dodatkowych, ze sie tak wyraze “patentow” ktore pomagaja IDE miedzy innymi w debugowaniu aplikacji.

wersja Release jest pozbawiona tego typu dodatkow i przeznaczona do rozpowszechniania.

jesli mialbym zgadywac, to wersje Debug w ogole ciezko odpalic w systemie pozbawionym Visual Studio w odpowiedniej wersji. ale to jak wspomnialem- moje domysly, bo czegos takiego nie probowalem.

Jeśli tworzy się oprogramowanie pod .NET (C++/CLI), to żeby uruchomić trzeba mieć zainstalowany .NET Framework.

Jeśli pisze się w “zwykłym” C++, to do uruchomienia potrzebne jest z kolei C++ Redistributable Package.

A wersję Debug można odpalić wszędzie, tylko że jest niezoptymalizowana i zawiera nadmiarowy kod wspomagający pracę debugera. Oprogramowanie dystrybuuje się w wersji Release.

Oczywiście, że można pisać. Tylko jeśli chcesz pisać w samym C++ nie możesz używać niczego z .NET Framework, czyli np. kontenery na dane. Poza tym kod napisany w VS, będący prawidłowym kodem C++ można łatwo przepisać na inne kompilatory. Kiedyś sam to robiłem, tylko należy uważać bo generalnie w Visual Studia jest Visual C++, a nie czysty C++ :wink:

No ok. Użyłem Release i działa jak się należy na innych kompach.

Jednak znalazł się kolejny problem. Z niezrozumiałych mi przyczyn mój program stworzony w Visual C++ 2008 (oczywiście mam cały pakiet Visual Studio 2008, ale to na marginesie) kiedy wybieram Release to…nie tworzyć zmiennych typu double :expressionless: Gdy zrobię Debug, działa bez zająknięcia. I tu nie chodzi o to, że mam jakieś błędy przy kompilacji, tylko z moich, dość szczegółowych obserwacji, wynika, że kompilator pomija linie kodu, gdzie próbuje stworzyć zmienna typu double. Z float nie ma problemu.

Ktoś wie, czego to może być wina? Skąd takie dziwne zachowanie Visual’a? Tylko nie mówcie, że VS jest tak zrobione, że double można tworzyć tylko dla wersji Debug, bo chyba wyrzucę z miejsca ten cały kombajn do programowania od MS.

Jeśli zmienna nie jest nigdzie używana(oprócz inicjalizacji) to nie dziw się, że jest wyrzucana w wersji Release - tak działają optymalizacje :wink:

Jeśli chodzi Ci o inną inicjalizację zmiennych to, jeśli sam ich nie inicjalizujesz, w Debug i Release przyjmują inne wartości.