Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet är det första av flera avsnitt som introducerar uppgraderingsproceduren för Visual Studio C++-projekt som skapades i äldre versioner av Visual Studio till Visual Studio 2017. I de här avsnitten introduceras uppgraderingsprocessen till exempel, som börjar med ett mycket enkelt projekt och övergår till något mer komplexa projekt. I det här avsnittet går vi igenom uppgraderingsprocessen för ett specifikt projekt, MFC Scribble. Den är lämplig som en grundläggande introduktion till uppgraderingsprocessen för C++-projekt.
Varje version av Visual Studio introducerar möjliga inkompatibiliteter som kan komplicera flytt av kod från en äldre version av Visual Studio till en nyare. Ibland finns de nödvändiga ändringarna i koden, så du måste kompilera om och uppdatera koden, och ibland är de nödvändiga ändringarna i projektfilerna. När du öppnar ett projekt som har skapats med en tidigare version av Visual Studio, frågar Visual Studio dig automatiskt om du vill uppdatera ett projekt eller en lösning till den senaste versionen. Dessa verktyg uppgraderar vanligtvis endast projektfilerna. de ändrar inte källkoden.
MFC-klottra
MFC Scribble är ett välkänt exempel som har inkluderats i många olika versioner av Visual C++. Det är ett enkelt ritningsprogram som illustrerar några av de grundläggande funktionerna i MFC. Det finns olika versioner av den, inklusive både hanterade och interna kodversioner. I det här exemplet hittade vi en gammal version av Scribble i inbyggd kod från Visual Studio 2005 och öppnade den i Visual Studio 2017.
Kontrollera att Windows Desktop-arbetsbelastningen är installerad innan du försöker uppgradera. Öppna Installationsprogrammet för Visual Studio (vs_installer.exe). Ett sätt att öppna installationsprogrammet är att välja Nytt filprojekt> och rulla längst ned i listan över installerade mallar tills du ser Open Visual Studio Installer. När installationsprogrammet har öppnats visas alla tillgängliga arbetsbelastningar. Om rutan för Windows Desktop-arbetsbelastningen inte är markerad väljer du den och klickar på knappen Ändra längst ned i fönstret.
Säkerhetskopiera sedan hela lösningen och allt dess innehåll.
Öppna slutligen lösningen i den senaste versionen av Visual Studio och låt guiden konvertera projektet.
Observera att du också kan köra devenv på kommandoraden /Upgrade med hjälp av alternativet i stället för att använda guiden för att uppgradera dina projekt. Se /Upgrade (devenv.exe). Det kan vara användbart när du automatiserar uppgraderingsprocessen för ett stort antal projekt.
Steg 1. Konvertera projektfilen
När du öppnar en gammal projektfil i Visual Studio erbjuder Visual Studio att konvertera projektfilen till den senaste versionen, som vi accepterade. Följande dialogruta visades:
Ett fel uppstod när vi skulle meddelas om att Itanium-målet inte är tillgängligt och inte kommer att konverteras.
Platform 'Itanium' is missing from this project. All the configurations and their file configuration settings specific to this platform will be ignored. If you want this platform converted, please make sure you have the corresponding platform installed under '%vctargetpath%\platforms\Itanium'. Continue to convert this project without this platform?
När det tidigare Scribble-projektet skapades var Itanium en viktig målplattform. Windows-plattformen stöder inte längre Itanium, så vi valde att fortsätta utan att stödja Itanium-plattformen.
Visual Studio visade sedan en migreringsrapport som visar alla problem med den gamla projektfilen.
I det här fallet var problemen alla varningar och Visual Studio gjorde lämpliga ändringar i projektfilen. Den stora skillnaden för projektet är att byggverktyget har ändrats från vcbuild till msbuild. Den här ändringen introducerades först i Visual Studio 2010. Andra ändringar inkluderar viss omorganisering av sekvensen av element i själva projektfilen. Inget av problemen krävde ytterligare uppmärksamhet för det här enkla projektet.
Steg 2. Få det att kompilera
Innan vi skapar kontrollerar vi plattformsverktyguppsättningen så att vi vet vilken kompilatorversion som projektsystemet använder. I dialogrutan projektegenskaper under Konfigurationsegenskaper går du till kategorin Allmänt och tittar på egenskapen Plattformsverktyguppsättning . Den innehåller versionen av Visual Studio och versionsnumret för plattformsverktyget, som i det här fallet är v141 för Visual Studio 2017-versionen av verktygen. När du konverterar ett projekt som ursprungligen kompilerades med Visual Studio 2010, 2012, 2013 eller 2015 uppdateras inte verktygsuppsättningen automatiskt till den senaste verktygsuppsättningen.
Om du vill växla till Unicode öppnar du projektets egenskaper. Under Konfigurationsegenskaper väljer du avsnittet Allmänt och letar upp egenskapen Teckenuppsättning . Ändra detta från Använd flerbytesteckenuppsättning till Använd Unicode-teckenuppsättning. Effekten av den här ändringen är att nu har _UNICODE- och UNICODE-makron definierats och _MBCS inte är det, vilket du kan verifiera i egenskapsdialogrutan under kategorin C/C++ i egenskapen Kommandorad .
/GS /analyze- /W4 /Zc:wchar_t /Zi /Gm- /Od /Fd".\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_AFXDLL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX /Zc:forScope /Gd /Oy- /MDd /Fa".\Debug\" /EHsc /nologo /Fo".\Debug\" /Fp".\Debug\Scribble.pch" /diagnostics:classic
Även om Scribble-projektet inte har konfigurerats för att kompilera med Unicode-tecken, skrevs det redan med TCHAR i stället för tecken, så ingenting behöver faktiskt ändras. Projektet byggs framgångsrikt med Unicode-teckenuppsättningen.
Skapa nu lösningen. I utdatafönstret meddelar kompilatorn oss att _WINNT32_WINNT inte har definierats:
_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
Det här är en varning, inte ett fel, och är mycket vanligt när du uppgraderar ett Visual Studio C++-projekt. Det här är makrot som definierar vilken lägsta version av Windows som vårt program ska köras på. Om vi ignorerar varningen accepterar vi standardvärdet _WIN32_WINNT_MAXVER, vilket innebär den aktuella versionen av Windows. En tabell med möjliga värden finns i Använda Windows-huvuden. Vi kan till exempel ställa in att den ska köras på valfri version från Vista och framåt.
#define _WIN32_WINNT _WIN32_WINNT_VISTA
Om koden använder delar av Windows-API:et som inte är tillgängliga i den windowsversion som du anger med det här makrot bör du se det som ett kompilatorfel. När det gäller Klottra-koden finns det inget fel.
Steg 3. Testa och felsöka
Det finns ingen testsvit, så vi har precis startat appen och testat dess funktioner manuellt via användargränssnittet. Inga problem observerades.
Steg 4. Förbättra koden
Nu när du har migrerat till Visual Studio 2017 kanske du vill göra några ändringar för att dra nytta av nya C++-funktioner. Den aktuella versionen av C++-kompilatorn är mycket mer överensstämmande med C++-standarden än tidigare versioner, så om du har ett sinne för att göra vissa kodändringar för att göra koden säkrare och mer portabel för andra kompilatorer och operativsystem bör du överväga några förbättringar.
Nästa steg
Klotter var ett litet och enkelt Windows-skrivbordsprogram, och det var inte svårt att konvertera. Många små, enkla appar konverterar lika enkelt till den nya versionen. För mer komplexa program, med många fler kodrader, äldre äldre kod som kanske inte uppfyller moderna tekniska standarder, flera projekt och bibliotek, anpassade byggsteg eller för komplexa skriptbaserade automatiserade versioner, tar det längre tid att uppgradera. Fortsätt med nästa exempel, ett ATL/COM-program med namnet COM Spy.
Se även
Portning och uppgradering: Exempel och fallstudier
Nästa exempel: COM Spy