Sdílet prostřednictvím


Poradce při potížích s Visual Basic a Visual C#-rozšiřitelnost

Zde jsou techniky pro některé více běžných problémů rozšiřitelnost, může dojít při vývoji aplikace rozšiřitelnost pro nápravu Visual Basic nebo Visual C# projektu.

Specifický problém v tomto seznamu nezobrazí, naleznete v části MSDN Online podpora na https://support.microsoft.com Další informace.

Přidat a odebrat metod v CodeModel nefungují.

Přidání a odebrání metod různých tříd CodeModel2 objektu nejsou podporovány v Visual Basic projekty.Volání těchto metod zobrazí chybu "Není implementováno".Nepodporované metody jsou:

AddAttribute

AddBase

AddClass

AddDelegate

AddEnum

AddFunction

AddImplementedInterface

AddInterface

AddNameSpace

AddParameter

AddProperty

AddStruct

AddVariable

RemoveInterface

Odebírat členy

RemoveMethod

RemoveParameter

 

Přidat prvky kódu k aplikaci pomocí makra pomocí funkce úpravy textu rozšíření modelu.Podrobnosti naleznete v tématu Jak: Přidání textu v editoru kódu jazyka C# nebo Visual Basic pomocí makra, který obsahuje například přidání kódu do zdrojového souboru.Visual Studio Obecné rozšiřitelnosti model obsahuje několik objektů, které jsou užitečné pro čtení a úpravy zdrojového kódu.Zahrnují Document objektu, TextDocument objektu, EditPoint objektu, TextPoint objektu a VirtualPoint objektu.

Nelze změnit vlastnosti objektů CodeModel.

Většina vlastností v CodeModel2 jsou implementovány jako pole určené jen pro čtení pro Visual Basic projekty.Při pokusu o nastavení vlastností za běhu načíst chybu "Není implementováno".Vlastnosti pouze pro čtení:

Access

CanOverride

Comment (Komentář)

DocComment

Příjemce

InitExpression

IsAbstract

IsConstant

IsShared

MustImplement

Setter

 

Změňte hodnotu CodeModel2 vlastnosti objektu změnit definici kódu element ve zdrojovém souboru.To lze provést dvěma způsoby:

Volání CodeElement objektu selhává.

Volání do CodeModel2 změně projektu po vytvoření odkazu na objekt selhání CodeModel2.Můžete mít například rozšíření aplikace spuštěné ve vývojovém prostředí.Že může mít načíst aplikaci CodeModel2 instance jednoho třídy definované v projektu.Uživatel může potom ve vývojovém prostředí odstranit třídu.Následující volání CodeModel2 pro selhání, které třídy, protože třídy v projektu již existuje.

Není k dispozici žádná vlastnost, kterou lze otestovat, zda je stále platný odkaz.Tyto problémy můžete vyhnout využitím robustních metod programování.

Chcete upravit kód makra v textovém editoru.

Pravděpodobně příležitostech, když potřebujete upravit makro soubor v textovém editoru.Uložit makro soubor ve formátu prostého textu na soubor nabídky, klepněte Export příkaz.Když Exportovat soubor dialogovém okně zadejte název exportovaného souboru, který chcete vytvořit.Soubor bude uložen jako Visual Basic zdrojový soubor s příponou VB.

Přidat existující položku na příkaz soubor nabídka umožňuje přidat Visual Basic zdrojový soubor k projektu maker.

Další informace naleznete v tématu Managing Macros.

Zobrazuje zprávy o zboží k dispozici.

Objekt může zobrazit širokou nabídku chybové zprávy, pokud kód drží odkaz na jeden z objektů rozšíření změní strukturu projektu.Tato situace může nastat při:

  • Projekt je uzavřena ve vývojovém prostředí.V tomto případě Project odkaz na něj stává neplatným, stejně jako všechny objekty obsažené v projektu.Používáte-li, Project odkaz, případně chcete-li přidat soubor do projektu, metoda selže.Například následující makro vrátí "Projektu není k dispozici" při pokusu o přístup k proj.Name:

    ' Macro editor
    Public Sub AccessAClosedProject()
       Dim proj As Project = DTE.Solution.Projects.Item(1)
       DTE.Solution.Close()
       MsgBox(proj.Name)
    End Sub
    
  • Soubor je odstraněn z projektu.Například následující makro vrátí "Projectitem" není k dispozici při pokusu o přístup k 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
    
  • Odkaz odstraněn z projektu.Například následující makro vrátí "serveru došlo k výjimce" při pokusu o přístup k 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
    
  • Zdroj ovládacího prvku změní způsobit opětovné načtení projektu.V tomto případě zneplatnění původní objekty.Reload například nastane, pokud rezervujete soubor projektu a nové verze existuje ve zdrojové databázi ovládací prvek.Například reload vyvolá kontrolu v souboru projektu a musí být sloučené soubory v ovládacím prvku zdroj.

  • Uloží položku projektu pomocí Uložit jako příkaz.Vytvoří nový ProjectItem objektu souboru.Původní objekt stává neplatným.

  • Cokoli stane, že způsobí, že projekt znovu načíst.

Není k dispozici žádná vlastnost, která můžete otestovat, zda je stále platný odkaz na projekt nebo položku projektu.Příslušné chyby vrácené některé vlastnosti a metody objektu označují, že již není platný.Tyto problémy můžete vyhnout využitím robustních metod programování.

Vytvoření nového projektu a chcete nějaké chybové zprávy zobrazit.

Při použití AddFromFile metoda, různá dialogová při výskytu chyby při vytváření projektu.LaunchWizard Metodu lze použít k vytváření nových projektů a potlačit uživatelského rozhraní.Při volání LaunchWizard Chcete-li vytvořit nový projekt z rozšíření projektu, je výchozí chování, chyby se zobrazí v polích zprávy.

LaunchWizard Metoda přebírá dva argumenty při spuštění Průvodce projektu.První argument je název souboru průvodce (soubor .vsz).Druhý argument je pole hodnot, který je předán při spuštění průvodce.Nastavením sedmý prvku matice k true, můžete vynutit chyb vyvolávají výjimky, které může být zachycena v Try...Catch struktury.Průvodce novou aplikaci Windows očekává, že tyto hodnoty v poli:

Index pole

Value

0

WizardType, identifikátor GUID označující typ průvodce.Identifikátor GUID pro nového Průvodce projektu je "{0F90E1D0-4999-11D1-B6D1-00A0C90F2744}".

1

ProjectName, řetězec název nového projektu.

2

Místní adresář řetězec obsahující úplnou cestu ke složce, kde bude vytvořen nový projekt.

3

Instalační adresář, řetězce obsahujícího složku, kde Visual Studio je nainstalován.

4

Exkluzivní, logická hodnota označující, zda je třeba ukončit všechny existující otevřené řešení.

5

Název řešení řetězec název souboru řešení bez cesty nebo rozšíření.

6

Tichý režim logická hodnota určující, zda průvodce spustit bez zásahu uživatele.

Následující makro ukazuje, jak použít příznak při volání průvodce.Pokud jste spustili toto makro jednou by byl spuštěn bez chyb, za předpokladu, že adresář a projekt již neexistuje.Pokud jste spustili toto makro podruhé, by k chybě aktivována.Protože příznak nastaven na true, je výjimka zachycena 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

Co je HRESULT: 0x80047E2C?

K této chybě může dojít při práci s CodeModel2 objekty Visual Basic zdrojové soubory.

Při psaní kódu, který spravuje odkazy na CodeElement2 objektů si měli být vědomi, že zatímco držíte odkaz změnit základní zdrojový kód.Prvek kódu může odstraněn, přejmenován nebo účastní chyba kompilátoru.Dojde k volání CodeElement2 objektu vrátit chybovou zprávu "výjimku z HRESULT: 0x80047E2C."

Jakmile bude odkaz neplatný tímto způsobem, nelze obnovit.Chcete-li tento problém vyřešit, opravte chyby ve zdrojovém kódu a načíst nový odkaz z CodeModel2 objektu.

Následující makra ukazují, jak této chybě pravděpodobně dojde.Přidáte třídy do projektu s názvem LostClass.Nastavit třídu nejvyšší úrovně, ne uvnitř třídy nebo oboru názvů.Spustit makro SetElement odstranit třídu a spusťte makro GetElement.Při spuštění GetElement třída již existuje a lostClass odkaz je neplatný a vrátí chybu.

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

Viz také

Koncepty

Úvod k rozšíření projektu