Método IVsExtensionManager.CreateExtension
Método de extensão de fábrica.
Namespace: Microsoft.VisualStudio.ExtensionManager
Assembly: Microsoft.VisualStudio.ExtensionManager (em Microsoft.VisualStudio.ExtensionManager.dll)
Sintaxe
'Declaração
Function CreateExtension ( _
extensionPath As String _
) As IExtension
IExtension CreateExtension(
string extensionPath
)
IExtension^ CreateExtension(
String^ extensionPath
)
abstract CreateExtension :
extensionPath:string -> IExtension
function CreateExtension(
extensionPath : String
) : IExtension
Parâmetros
extensionPath
Tipo: StringCaminho de um arquivo de manifesto do VSIX.
Valor de retorno
Tipo: Microsoft.VisualStudio.ExtensionManager.IExtension
O IExtension o objeto que contém os metadados no manifesto do VSIX para uma extensão.
Comentários
Embora essa API oferece suporte a Extension Manager infra-estrutura, é recomendável que você não usá-lo porque ele está sujeito a alterações.
Exemplos
O exemplo a seguir usa GetEnabledExtensionContentLocations para obter os locais de todas as extensões de um determinado tipo personalizado. Em seguida, usa CreateExtension para acessar os outros metadados para cada extensão encontrado e obtenha o seu nome. Depois de salvar os nomes e informações de caminho, ele cria os comandos de menu para cada extensão.
// This is the CommandID of the placeholder menu item,
// as defined in the .vsct file.
int CmdIdBase = 0x103;
// These lists will store name and path information.
private ArrayList SkinNames = new ArrayList();
private ArrayList SkinPaths = new ArrayList();
// Call this from Initialize().
private void InitSkinList()
{
var mcs = GetService(typeof(IMenuCommandService))
as OleMenuCommandService;
int counter = CmdIdBase;
// Get the Extension Manager service.
var ExtMgrSvc = GetService(typeof(SVsExtensionManager))
as IVsExtensionManager;
// Iterate through installed extensions.
var attributes = new Dictionary<string, string>();
attributes.Add("Type", "Skin");
foreach (string SkinPath
in ExtMgrSvc.GetEnabledExtensionContentLocations(
"CustomExtension", attributes))
{
// Store the name and path information.
SkinPaths.Add(SkinPath);
SkinNames.Add(ExtMgrSvc.CreateExtension(SkinPath).Header.Name);
// Create a CommandID for the new menu item.
var cmdID = new CommandID(
GuidList.guidVSSkinHostCmdSet, counter);
// Create the menu item and add its event handlers.
var mc = new OleMenuCommand(
new EventHandler(OnSkinExec), cmdID);
mc.BeforeQueryStatus += new EventHandler(OnSkinQueryStatus);
mcs.AddCommand(mc);
counter ++;
}
}
private void OnSkinQueryStatus(object sender, EventArgs e)
{
var menuCommand = sender as OleMenuCommand;
if (null != menuCommand)
{
// Determine which menu item was queried.
int skinIndex = menuCommand.CommandID.ID - this.CmdIdBase;
if (skinIndex >= 0 && skinIndex < this.SkinNames.Count)
{
// Set the text.
menuCommand.Text = this.SkinNames[skinIndex] as string;
}
}
}
private void OnSkinExec(object sender, EventArgs e)
{
var menuCommand = sender as OleMenuCommand;
if (null != menuCommand)
{
// Get the name of the skin from the menu item.
string skinName = menuCommand.Text;
// Locate the name in the list of skins.
int i = this.SkinNames.IndexOf(skinName);
// Get the corrsponding path.
var skinPath = SkinPaths[i] as string;
if (SkinNames.Count > 0)
{
if (File.Exists(skinPath) || Directory.Exists(skinPath))
{
// Put code here to apply the skin extension...
MessageBox.Show("Skin " + skinName + " found:\r\n"
+ skinPath + ". \r\n\r\nApplying skin...");
}
else MessageBox.Show("Could not find skin " + skinName);
}
}
}
Segurança do .NET Framework
- Confiança total para o chamador imediato. O membro não pode ser usado por código parcialmente confiável. Para obter mais informações, consulte Usando bibliotecas de código parcialmente confiável.