Aracılığıyla paylaş


Visual Basic ve Visual C# Genişletilebilirlik Sorunlarını Giderme

Bazı karşılaşma için genişletilebilirlik uygulama geliştirirken daha yaygın genişletilebilirlik sorunlar remedying teknikleri aşağıda bir Visual Basic veya Visual C# proje.

Belirli sorununuzu bu listede görünmüyorsa, msdn Çevrimiçi destek görmek https://support.microsoft.com daha fazla bilgi için.

Ekle ve Kaldır yöntemleri CodeModel çalışmıyor.

Çeşitli sınıfları Add ve Remove yöntemleri CodeModel2 nesnesi değil de desteklenen Visual Basic projeleri.Bu yöntemlerden birini çağırırsanız, "Uygulanmayan" bir hata iletisi alır.Desteklenmeyen yöntemler şunlardır:

AddAttribute

AddBase

AddClass

AddDelegate

AddEnum

AddFunction

AddImplementedInterface

AddInterface

AddNameSpace

AddParameter yöntemlerinin ikisi

Add Property'yi

AddStruct

AddVariable

RemoveInterface

RemoveMember

RemoveMethod

RemoveParameter

 

Uygulamanız aracılığıyla bir makro kodu öğeleri eklemek için geniþletilebilirlik modeli metin düzenleme özelliklerini kullanın.Ayrıntılı bilgi için bkz: Nasıl yapılır: Visual Basic veya C# Code Editor metin eklemek için makro kullanma, kod kaynak dosyaya ekleme konusunda bir örnek içerir.Visual Studio Genel geniþletilebilirlik modeli, okuma ve kaynak kodunu değiştirmek için yararlı olan birkaç nesneleri içerir.Bunlar Document nesnesi, TextDocument nesnesi, EditPoint nesnesi, TextPoint nesnesi ve VirtualPoint nesne.

CodeModel nesnelerinin özelliklerini değiştiremiyorum.

Özelliklerinin çoğu CodeModel2 için salt okunur alanları olarak uygulanan Visual Basic projeleri.Çalışma zamanında bir özelliği ayarlamak çalışırsanız, "Uygulanmayan" bir hata iletisi alıyorum.Salt okunur özellikler içerir:

Erişim

CanOverride

Açıklama

DocComment

Alıcı

InitExpression

IsAbstract

IsConstant

IsShared

Uygulamalısınız

Ayarlayıcı

 

Değeri değiştirmek için bir CodeModel2 nesnenin özelliği, kaynak dosyadaki kod öğesinin tanımını değiştirin.Bunu iki şekilde yapabilirsiniz:

Bir CodeElement nesnesi çağrıları başarısız oluyor.

İçin çağırdığı bir CodeModel2 başvuru oluşturduktan sonra projenin değişirse hata nesnesi CodeModel2.Örneğin, geliştirme ortamında çalışan bir geniþletilebilirlik uygulama olabilir.Uygulama aldıktan bir CodeModel2 örnek proje içinde tanımlanan sınıfları için.Kullanıcı sınıfı, geliştirme ortamında siler.Sonraki çaðrýlar CodeModel2 sınıfı artık projede var olduğundan, başarısız, sınıf için.

Başvuru hala geçerli olup olmadığını belirlemek için test edebilirsiniz hiçbir özellik yoktur.Güçlü programlama yöntemleri kullanarak bu sorunları önleyebilirsiniz.

Benim makro kodunu bir metin düzenleyicide düzenlemek istiyorum.

Makro dosyanızı bir metin düzenleyicisinde düzenlemeniz gerektiğinde anlar olabilir.Makro dosyanız üzerinde düz metin olarak kaydetmek için Dosya menüsünde tıklatın Ver komut.Zaman Export File iletişim kutusu görüntülenirse, oluşturmak istediğiniz dışa aktarma dosyasının adını yazın.Dosya olarak kaydedilmiş bir Visual Basic .vb uzantılı dosya kaynağı.

Add Existing Item komutunu Dosya menü eklemenize olanak veren bir Visual Basic makro projenizi kaynak dosyaya.

Daha fazla bilgi için bkz. Managing Macros.

Kullanılamayan maddeler hakkında iletiler alıyorum.

Kodunuzu bir geniþletilebilirlik nesne referansı tuttuğunu karşın proje yapısını değiştirirse, nesneyi düğmesiyle çeşitli hata iletileri görüntüleyebilir.Bu durum olduğunda:

  • Bir proje geliştirme ortamında kapalı.Bu durumda, Project başvuruyu olur projede bulunan tüm nesneler gibi geçersiz.Kullanırsanız, Project başvurusu, belki de projeye dosya eklemek için yöntem başarısız olur.Örneğin, aşağıdaki makro "Proje kullanılamaz" ne zaman verir erişim çalışılırken proj.Name:

    ' Macro editor
    Public Sub AccessAClosedProject()
       Dim proj As Project = DTE.Solution.Projects.Item(1)
       DTE.Solution.Close()
       MsgBox(proj.Name)
    End Sub
    
  • Bir dosya projeden silindi.Örneğin, aşağıdaki makro "Projectitem" kullanılamaz verir erişmeye çalışırken projItem.Name:

    ' Macro editor
    Public Sub AccessADeletedFile()
       Dim proj As Project = DTE.Solution.Projects.Item(1)
       Dim projItem As ProjectItem = proj.ProjectItems.Item(1)
       proj.ProjectItems.Item(1).Delete()
       MsgBox(projItem.Name)
    End Sub
    
  • Başvuru projeden silindi.Örneğin, aşağıdaki makro "sunucu, bir özel durum oluşturdu" döndürür erişmeye çalışırken ref.Name:

    ' Macro editor
    Public Sub AccessARemovedReference()
       Dim vsproj As VSProject = _
          CType(DTE.Solution.Projects.Item(1).Object, VSProject)
       Dim ref As Reference = vsproj.References.Item(1)
       vsproj.References.Item(1).Remove()
       MsgBox(ref.Name)
    End Sub
    
  • Kaynak denetimi değişiklikleri yeniden projenin neden.Bu durumda, eski nesneleri geçersiz olur.Örneğin, proje dosyalarını inceleyin ve kaynak denetim veritabanında yeni bir sürüm varsa yeniden yükle bir oluşur.Proje dosyasını denetleyin ve kaynak denetimindeki dosyalarla birleştirilmelidir başka bir örnek olarak, bir yeniden yükleme gerçekleşir.

  • Proje öğesi kullanılarak kaydedilen Farklı Kaydet komut.Bu yeni bir oluşturur ProjectItem dosyası için nesne.Özgün nesne geçersiz olur.

  • Hiçbir şey geri yüklenecek proje neden olmuyor.

Bir proje ya da proje öğesi başvuru hala geçerli olup olmadığını belirlemek için test edebilirsiniz hiçbir özellik yoktur.Bazı özellik ve yöntemleri nesne tarafından döndürülen ilgili hatalar, artık geçerli olmadığını gösterir.Güçlü programlama yöntemleri kullanarak bu sorunları önleyebilirsiniz.

Yeni bir proje oluşturmak istiyor ve herhangi bir hata iletisi görüntülenmesini istemiyorsanız.

Kullanırken AddFromFile yöntemi, çeşitli iletişim kutularında görünen proje oluşturulurken hata ortaya çıktığında.LaunchWizard Yöntemi, yeni projeler oluşturmak ve kullanıcı arabirimi bastırmak için kullanılabilir.Ararken LaunchWizard genişletilebilirlik projeden yeni bir proje oluşturmak için varsayılan davranışı hatalar ileti kutularında görüntülendiğini değildir.

LaunchWizard Yöntemi, yeni proje Sihirbazı çalıştırıldığında, iki bağımsız değişken alır.İlk bağımsız değişken (.vsz dosyası) Sihirbazı dosya adıdır.İkinci bağımsız değişken çalıştırıldığında, Sihirbazına aktarılan değerler dizisidir.İçin dizinin yedinci öğesine ayarlayarak true, hataları, yakalanan özel durumlar throw zorlayabilirsiniz bir Try...Catch yapısı.Yeni bir Windows uygulaması Sihirbazı aşağıdaki değerler dizisinde bekler:

Dizi dizini

Value

0

WizardType, sihirbazın türünü belirten bir GUID.Yeni proje Sihirbazı için "{0F90E1D0-4999-11D1-B6D1-00A0C90F2744}" GUID değeridir.

1

ProjeAdı, yeni projenin adı için bir dize.

2

Yerel dizin, yeni proje oluşturulduğu klasörün tam yolunu içeren bir dize.

3

Yükleme dizini, klasör içeren bir dize nerede Visual Studio yüklenir.

4

Özel, varolan herhangi bir açık çözüm kapalı olup olmadığını belirten bir Boole değeri.

5

Çözüm adı, çözüm dosyasının yol ve uzantı olmadan bir dize adı.

6

Sessiz, sihirbaz sessizce çalıştırılması gerekip gerekmediğini belirten bir Boole değeri.

Aþaðýdaki makro, sihirbaz ararken sessiz bayrağını kullanın gösterilmiştir.Bu makroyu bir kez çalıştırdıysanız, dizin ve proje zaten yoktu sağlayan hatasız çalışır.Bu makroyu bir kez çalıştırdıysanız, bir hata oluşturdu.Sessiz bayrağı ayarlanmış olduğundan true, tarafından bir özel durum yakalandı Try...Catch block.

' Macro editor
Sub RunLaunchWizard()
   Dim params() As Object = New Object() { _
      "{0F90E1D0-4999-11D1-B6D1-00A0C90F2744}", _
      "NewProjectName", _
      "NewProjectPath", _
      "", _
      False, _
      "", _
      True}  ' -->  This is the "Silent" flag ... TRUE=No UI, FALSE=UI
   Dim res As EnvDTE.wizardResult
   Dim s As String = _
      DTE.Solution.TemplatePath(VSLangProj.PrjKind.prjKindVBProject)

   Try
      res = DTE.LaunchWizard(s & "WindowsApplication.vsz", params)
   Catch e1 As System.Exception
      MsgBox("Cannot create new project.")
   End Try
End Sub

hresult nedir: 0x80047E2C?

İşlediğinizde, bu hata oluşabilir CodeModel2 nesnelerin Visual Basic kaynak dosyaları.

Ne zaman size yazma baþvurularý tutar kod CodeElement2 nesneleri, olması gereken farkında başvuru ölçülere sırada temel kaynak kodunu değiştirebilirsiniz.Kod öğesi silinmiş, yeniden adlandırılmış veya bir derleyici hatası söz konusu.Bu durumda, yapılan her çağrı CodeElement2 nesnesi hata iletisi döndürmek "HRESULT özel durum: 0x80047E2C."

Bir başvuru bu yolla geçersiz hale geldiğinde, kurtarılamaz.Bu sorunu gidermek için kaynak kodunda hataları düzeltmek ve yeni bir başvuru almak CodeModel2 nesne.

Aşağıdaki makroları nasıl bu hata oluşabilir gösterilmektedir.Projeniz için LostClass adında bir sınıfı ekleyin.Bu ad alanı veya sınıf içinde değil bir üst düzey sınıf olun.SetElement makrosunu çalýþtýrýn, sınıf silip GetElement makroyu çalıştırabilirsiniz.GetElement çalıştırdığınızda, sınıf artık yok ve lostClass başvurusu geçersiz ve hata verir.

Public Module CreateLostClass
    Dim lostClass As CodeElement

    Sub SetElement()
        Dim proj As Project = DTE.Solution.Projects.Item(1)
        lostClass = proj.CodeModel.CodeElements.Item("LostClass")
        MsgBox(lostClass.Name)
    End Sub

    Sub GetElement()
        MsgBox(lostClass.Name)
    End Sub
End Module

Ayrıca bkz.

Kavramlar

Proje Genişletilebilirliğine Giriş