Aracılığıyla paylaş


Projeleri Yükseltme

Visual Studio'nun bir sürümünden sonraki sürüme proje modelinde yapılan değişiklikler, projelerin ve çözümlerin daha yeni sürümde çalışabilmeleri için yükseltilmesi gerektirebilir. Visual Studio SDK'sı, kendi projelerinizde yükseltme desteği uygulamak için kullanılabilecek arabirimler sağlar.

Yükseltme Stratejileri

Yükseltmeyi desteklemek için, proje sistemi uygulamanızın bir yükseltme stratejisi tanımlaması ve uygulaması gerekir. Stratejinizi belirlerken yan yana (SxS) yedeklemeyi, kopya yedeklemeyi veya her ikisini birden desteklemeyi seçebilirsiniz.

  • SxS yedeklemesi, projenin yalnızca yerinde yükseltmesi gereken dosyaları kopyalayarak uygun bir dosya adı soneki (örneğin, ".old") eklemesi anlamına gelir.

  • Yedeklemeyi kopyala, bir projenin tüm proje öğelerini kullanıcı tarafından sağlanan bir yedekleme konumuna kopyalaması anlamına gelir. Özgün proje konumundaki ilgili dosyalar yükseltilir.

Yükseltme Nasıl Çalışır?

Visual Studio'nun önceki bir sürümünde oluşturulan bir çözüm daha yeni bir sürümde açıldığında, IDE yükseltilmesi gerekip gerekmediğini belirlemek için çözüm dosyasını denetler. Yükseltme gerekiyorsa, yükseltme işleminde kullanıcıya yol gösterirken Yükseltme Sihirbazı otomatik olarak başlatılır.

Bir çözümün yükseltilmesi gerektiğinde, yükseltme stratejisi için her proje fabrikasını sorgular. Strateji, proje fabrikasının kopyalama yedeklemesini mi yoksa SxS yedeklemesini mi desteklediğini belirler. Bilgiler, yedekleme için gerekli bilgileri toplayan ve kullanıcıya uygun seçenekleri sunan Yükseltme Sihirbazı'na gönderilir.

Çoklu Proje Çözümleri

Bir çözüm birden çok proje içeriyorsa ve yalnızca SxS yedeklemesini destekleyen bir C++ projesi ve yalnızca kopya yedeklemeyi destekleyen bir Web projesi gibi yükseltme stratejileri farklıysa, proje fabrikalarının yükseltme stratejisi üzerinde anlaşması gerekir.

Çözüm, IVsProjectUpgradeViaFactory için her proje fabrikasını sorgular. Ardından, genel proje dosyalarının yükseltilmesi gerekip gerekmediğini görmek ve desteklenen yükseltme stratejilerini belirlemek için çağırır UpgradeProject_CheckOnly . Ardından Yükseltme Sihirbazı çağrılır.

Kullanıcı sihirbazı tamamladıktan sonra, UpgradeProject gerçek yükseltmeyi gerçekleştirmek için her proje fabrikasında çağrılır. Yedeklemeyi kolaylaştırmak için IVsProjectUpgradeViaFactory yöntemleri, yükseltme işleminin SVsUpgradeLogger ayrıntılarını günlüğe kaydetmek için hizmeti sağlar. Bu hizmet önbelleğe alınamaz.

Tüm ilgili genel dosyaları güncelleştirdikten sonra, her proje fabrikası bir proje örneği oluşturmayı seçebilir. Proje uygulamasının IVsProjectUpgrade desteklemesi gerekir. UpgradeProject yöntemi daha sonra tüm ilgili proje öğelerini yükseltmek için çağrılır.

Uyarı

UpgradeProject yöntemi SVsUpgradeLogger hizmetini sağlamaz. Bu hizmet QueryService arayarak elde edilebilir.

En İyi Yöntemler

SVsQueryEditQuerySave Dosyayı düzenlemeden önce düzenleyip düzenleyebildiğinizi ve kaydetmeden önce kaydedip kaydedemediğini denetlemek için hizmeti kullanın. Bu, yedekleme ve yükseltme uygulamalarınızın kaynak denetimi altındaki proje dosyalarını, yetersiz izinlere sahip dosyaları vb. işlemelerine yardımcı olur.

Yükseltme işleminin SVsUpgradeLogger başarısı veya başarısızlığı hakkında bilgi sağlamak için yedekleme ve yükseltmenin tüm aşamalarında hizmeti kullanın.

Projeleri yedekleme ve yükseltme hakkında daha fazla bilgi için vsshell2.idl'de IVsProjectUpgrade açıklamalarına bakın.

Özel Projeleri Yükseltme

Proje dosyasında kalıcı olarak bulunan bilgileri ürününüzün farklı Visual Studio sürümleri arasında değiştirirseniz, proje dosyanızı eski sürümden yeni sürüme yükseltmeyi desteklemeniz gerekir. Visual Studio Dönüştürme Sihirbazı'na katılmanıza olanak tanıyan yükseltmeyi desteklemek için arabirimini IVsProjectUpgradeViaFactory uygulayın. Bu arabirim, kopya yükseltme için kullanılabilen tek mekanizmayı içerir. Proje yükseltmesi, çözümün bir parçası açıldığında gerçekleşir. Arabirim IVsProjectUpgradeViaFactory proje fabrikası tarafından uygulanır veya en azından proje fabrikasından alınabilir olmalıdır.

Arabirimi kullanan IVsProjectUpgrade eski mekanizma hala desteklenmektedir, ancak projenin bir parçası olarak proje sistemini kavramsal olarak yükseltmektedir. Visual Studio ortamı tarafından IVsProjectUpgrade arabirimi, IVsProjectUpgradeViaFactory arabirimi çağırılsa veya uygulansa bile çağrılır. Bu yaklaşım, yükseltmenin yalnızca kopya ve proje bölümlerini uygulamak için IVsProjectUpgradeViaFactory kullanmanıza ve işin geri kalanını (muhtemelen yeni konumda) yerinde gerçekleştirmek için IVsProjectUpgrade arabirimine devretmenize olanak tanır.

örnek uygulaması IVsProjectUpgradeiçin bkz. VSSDK Örnekleri.

Proje yükseltmelerinde aşağıdaki senaryolar ortaya çıkar:

  • Proje tarafından desteklenebilecek olandan daha yeni bir biçimdeyse dosya, bunu belirten bir hata döndürmelidir. Bu, ürününüzün eski sürümünün sürümü denetlemek için kod içerdiğini varsayar.

  • yönteminde PUVFF_SXSBACKUPUpgradeProject bayrağı belirtilirse, yükseltme, projenin açılmasından önce yerinde yükseltme olarak uygulanır.

  • yönteminde PUVFF_COPYBACKUPUpgradeProject bayrağı belirtilirse, yükseltme bir kopya yükseltmesi olarak uygulanır.

  • UPF_SILENTMIGRATE UpgradeProject bayrağı çağrıda belirtilirse, proje açıldıktan sonra ortam tarafından kullanıcıya proje dosyasını yerinde yükseltme olarak yükseltmesi için talepte bulunulur. Örneğin, kullanıcı çözümün eski bir sürümünü açtığında ortam kullanıcıdan yükseltmesini ister.

  • Çağrıda UPF_SILENTMIGRATEUpgradeProject bayrak belirtilmezse, kullanıcıdan proje dosyasını yükseltmesini istemeniz gerekir.

    Aşağıda örnek bir yükseltme istemi iletisi verilmiştir:

    "'%1' projesi Visual Studio'nun eski bir sürümüyle oluşturuldu. Visual Studio'nun bu sürümüyle açarsanız, visual studio'nun eski sürümleriyle açamayabilirsiniz. Devam etmek ve bu projeyi açmak istiyor musunuz?"

IVsProjectUpgradeViaFactory uygulamak için

  1. Arabirimin IVsProjectUpgradeViaFactory yöntemini uygulayın, özellikle UpgradeProject yöntemini fabrika uygulama projenizde gerçekleştirin veya uygulamaları fabrika uygulama projenizden çağrılabilir hale getirin.

  2. Çözüm açma işleminin bir parçası olarak yerinde yükseltme yapmak istiyorsanız, uygulamanızda PUVFF_SXSBACKUP parametresi olarak bayrağını VSPUVF_FLAGSUpgradeProject sağlayın.

  3. Çözüm açma işleminin bir parçası olarak yerinde yükseltme yapmak istiyorsanız, uygulamanızda PUVFF_COPYBACKUP bayrağını VSPUVF_FLAGS parametresi olarak UpgradeProject sağlayın.

  4. Hem 2. hem de 3. adımlar için, dosyanın gerçek yükseltme adımları IVsQueryEditQuerySave2 kullanılarak aşağıdaki "Uygulama IVsProjectUpgade" bölümünde açıklandığı gibi uygulanabilir veya dosya yükseltmesini IVsProjectUpgrade'e atayabilirsiniz.

  5. Visual Studio Geçiş Sihirbazı'nı kullanarak kullanıcı için yükseltmeyle ilgili iletileri göndermek amacıyla IVsUpgradeLogger yöntemlerini kullanın.

  6. IVsFileUpgrade arabirimi, proje yükseltmesinin bir parçası olarak gerçekleşmesi gereken her tür dosya yükseltmesini uygulamak için kullanılır. Bu arabirim IVsProjectUpgradeViaFactory öğesinden çağrılmaz, ancak proje sisteminin bir parçası olan ve ana proje sisteminin doğrudan farkında olmayabileceği dosyaları yükseltmek için bir mekanizma olarak sağlanır. Örneğin, derleyiciyle ilgili dosyalar ve özellikler proje sisteminin geri kalanını işleyen aynı geliştirme ekibi tarafından işlenmezse bu durum ortaya çıkabilir.

IVsProjectUpgrade Uygulaması

Proje sisteminiz yalnızca uyguluyorsa IVsProjectUpgrade, Visual Studio Dönüştürme Sihirbazı'na katılamaz. Ancak, IVsProjectUpgradeViaFactory arabirimini uygulasınız bile, dosya güncellemeyi IVsProjectUpgrade uygulamasına devretmeye devam edebilirsiniz.

IVsProjectUpgrade'ı uygulamak için

  1. Kullanıcı bir projeyi açmaya çalıştığında, UpgradeProject yöntem proje açıldıktan sonra ve proje üzerinde başka bir kullanıcı eylemi gerçekleştirilmeden önce ortam tarafından çağrılır. Kullanıcıdan çözümü yükseltmesi zaten istendiyse, UPF_SILENTMIGRATE parametresinde grfUpgradeFlags bayrağı geçirilir. Kullanıcı, Var Olan Projeyi Ekle komutunu kullanarak bir projeyi doğrudan açarsa, UPF_SILENTMIGRATE bayrak geçirilmez ve projenin kullanıcıdan yükseltmesini istemesi gerekir.

  2. Çağrıya UpgradeProject yanıt olarak, projenin proje dosyasının yükseltilip yükseltılmadığını değerlendirmesi gerekir. Projenin proje türünü yeni bir sürüme yükseltmesi gerekmiyorsa, yalnızca bayrağı döndürebilir S_OK .

  3. Projenin proje türünü yeni bir sürüme yükseltmesi gerekiyorsa, tagVSQueryEditFlags değerini rgfQueryEdit parametresine geçirip QueryEditFiles yöntemini çağırarak proje dosyasının değiştirilip değiştirilemeyeceğini belirlemesi gerekir. Daha sonra projenin aşağıdakileri yapması gerekir:

  4. Proje dosyasındaki QueryEditFiles çağrı dosyanın kullanıma alınmasına ve en son sürümün alınmasına neden oluyorsa, proje kaldırılır ve yeniden yüklenir. UpgradeProject Yöntemi, projenin başka bir örneği oluşturulduktan sonra yeniden çağrılır. Bu ikinci çağrıda, proje dosyası diske yazılabilir; projenin, proje dosyasının önceki biçiminde uzantılı bir yedeğini .ESKİ ile kaydetmesi, gerekli güncelleme değişikliklerini yapması ve proje dosyasını yeni biçimde kaydetmesi önerilir. Yine, yükseltme işleminin herhangi bir bölümü başarısız olursa, yöntem dönüş değeri olarak VS_E_PROJECTMIGRATIONFAILED başarısız olduğunu göstermelidir. Bu, projenin Çözüm Gezgini'nde kaldırılmasına neden olur.

    QueryEditFiles yöntemine (Sadece Raporla değerini belirterek) yapılan çağrının QER_EditNotOK ve QER_ReadOnlyUnderScc bayraklarını döndürdüğü durum için çevrede gerçekleşen tüm süreci anlamak önemlidir.

  5. Kullanıcı proje dosyasını açmaya çalışır.

  6. Ortam uygulamanızı CanCreateProject çağırır.

  7. Eğer CanCreateProjecttrue döndürürse, ortam CanCreateProject implementasyonunuzu çağırır.

  8. Ortam, uygulamanızı çağırarak Load dosyayı açar ve proje nesnesini başlatır, örneğin Project1.

  9. Ortam, proje dosyasının yükseltilmesi gerekip gerekmediğini belirlemek için uygulamanızı IVsProjectUpgrade::UpgradeProject çağırır.

  10. QueryEditFiles çağırır ve rgfQueryEdit parametresi için QEF_ReportOnly değerini geçirirsiniz.

  11. Çevre, QER_EditNotOK döndürür VSQueryEditResult ve QER_ReadOnlyUnderScc bit VSQueryEditResultFlags içinde ayarlanır.

  12. Uygulamanız öğesini (, ) olarak çağırır.

Bu çağrı, proje dosyanızın yeni bir kopyasının kullanıma alınmasına ve en son sürümün alınmasına ve proje dosyanızın yeniden yüklenmesine neden olabilir. Bu noktada iki şeyden biri gerçekleşir:

  • Kendi proje yeniden yüklemesini siz üstlenirseniz, ortam ReloadItem (VSITEMID_ROOT) uygulamanızı çağırır. Bu çağrıyı aldığınızda projenizin ilk örneğini (Project1) yeniden yükleyin ve proje dosyanızı yükseltmeye devam edin. Ortama, true yerine GetProperty (VSHPROPID_HandlesOwnReload) dönecek olursanız kendi projenizi yeniden yükleme işleminizi gerçekleştirdiğinizi bilir.

  • Kendi proje yeniden yükleme işleminizi gerçekleştirmezseniz, GetProperty için false değerini geri dönersiniz (VSHPROPID_HandlesOwnReload). Bu durumda, (QEF_ForceEdit_NoPrompting, QEF_DisallowInMemoryEdits) döndürülmeden önce QueryEditFiles, ortam projenizin başka bir yeni örneğini (örneğin Project2) aşağıdaki gibi oluşturur:

    1. Ortam, ilk proje nesneniz olan Project1'i çağırır Close ve bu nedenle bu nesneyi etkin olmayan duruma yerleştirir.

    2. Ortam, projenizin IVsProjectFactory::CreateProject project2 adlı ikinci bir örneğini oluşturmak için uygulamanızı çağırır.

    3. Ortam, dosyayı açmak ve ikinci proje nesnesi olan Project2'yi başlatmak için uygulamanızı IPersistFileFormat::Load çağırır.

    4. Ortam, proje nesnesinin yükseltilip yükseltilmeyeceğini belirlemek için ikinci kez çağırır IVsProjectUpgrade::UpgradeProject . Ancak, bu çağrı projenin yeni, ikinci bir örneği olan Project2'de yapılır. Bu, çözümde açılan projedir.

      Uyarı

      İlk projeniz olan Project1'in etkin olmayan duruma getirildiği durumda, uygulamanızın ilk çağrısından S_OK değerini döndürmeniz gerekir.

    5. QueryEditFiles çağırır ve rgfQueryEdit parametresi için QEF_ReportOnly değerini geçirirsiniz.

    6. Çevre QER_EditOK'u döndürür ve proje dosyası yazılabilir olduğu için yükseltme devam edebilir.

Yükseltmeyi başaramazsanız, IVsProjectUpgrade::UpgradeProjectVS_E_PROJECTMIGRATIONFAILED geri dönün. Yükseltme gerekmiyorsa veya yükseltmemeyi seçerseniz, IVsProjectUpgrade::UpgradeProject çağrısını bir no-op işlemi olarak kabul edin. döndürürseniz VS_E_PROJECTMIGRATIONFAILED, projenizin çözümüne bir yer tutucu düğümü eklenir.

Proje Öğelerini Yükseltme

Uygulamadığınız proje sistemlerinin içine öğe ekler veya yönetirseniz, proje yükseltme işlemine katılmanız gerekebilir. Crystal Reports, proje sistemine eklenebilen bir öğe örneğidir.

Genellikle, proje öğesi uygulayıcıları, yükseltme kararı almak için proje başvurularının ne olduğunu ve diğer proje özelliklerinin ne olduğunu bilmeleri gerektiğinden, zaten tam olarak örnek oluşturulmuş ve yükseltilmiş bir projeden yararlanmak ister.

Proje yükseltme bildirimini almak için

  1. Proje öğesi uygulamanızda SolutionOrProjectUpgrading bayrağını (vsshell80.idl içinde tanımlanır) ayarlayın. Bu, Visual Studio kabuğu bir proje sisteminin yükseltme sürecinde olduğunu belirlediğinde proje öğenizin VSPackage'ın otomatik olarak yüklenmesine neden olur.

  2. AdviseSolutionEvents yöntemi aracılığıyla IVsSolutionEventsProjectUpgrade arabirimini önerin.

  3. Proje IVsSolutionEventsProjectUpgrade sistemi uygulaması yükseltme işlemlerini tamamladıktan ve yeni yükseltilen proje oluşturulduktan sonra arabirim tetiklenir. Senaryoya bağlı olarak, IVsSolutionEventsProjectUpgrade arabirimi , OnAfterOpenSolutionveya OnAfterOpenProject yöntemlerinden sonra OnAfterLoadProjecttetiklenir.

Proje öğesi dosyalarını yükseltmek için

  1. Proje öğesi uygulamanızda dosya yedekleme işlemini dikkatle yönetmeniz gerekir. Bu özellikle, fUpgradeFlag yönteminin UpgradeProject parametresinin PUVFF_SXSBACKUP olarak ayarlandığı ve yedeklenmiş dosyaların ".old" olarak belirlenmiş dosyaların yanına yerleştirildiği yan yana yedekleme durumu için geçerlidir. Sistemin projenin yükseltildiği zamandan daha eski olan yedek dosyalar geçersiz olarak işaretlenebilir. Ayrıca, bunu önlemek için belirli adımlar atmadığınız takdirde bunların üzerine yazılabilir.

  2. Proje öğeniz proje yükseltmesine ilişkin bir bildirim aldığında Visual Studio Dönüştürme Sihirbazı görüntülenmeye devam eder. Bu nedenle, sihirbaz arayüzüne yükseltme iletileri sağlamak için IVsUpgradeLogger arabirimin yöntemlerini kullanmalısınız.