【发布时间】:2019-02-28 13:37:47
【问题描述】:
在观看 Youtube 上有关如何开始的视频后,我正在尝试为 Visual Studio 做一个扩展。在遵循一些说明后,我在工具下的菜单中尝试为自定义命令设置扩展时遇到了一个小错误。
DTE2 dte = (DTE2)ServiceProvider.GetServiceAsync(typeof(DTE));
我的 ServiceProvider 是 IAsyncServiceProvider 而不是 ServiceProvider。那么有没有一种方法可以制作一个 DTE2 对象,而无需将所有内容从 IAsyncServiceProvider 更改为 ServiceProvider。
我的代码:
<code> public static async Task InitializeAsync(AsyncPackage package)
{
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken);
OleMenuCommandService commandService = await package.GetServiceAsync((typeof(IMenuCommandService))) as OleMenuCommandService;
Instance = new FRC(package, commandService);
}
public static void ExecuteCommand(DTE2 dte, string commandName)
{
ThreadHelper.ThrowIfNotOnUIThread();
var command = dte.Commands.Item(commandName);
if (command.IsAvailable)
{
dte.ExecuteCommand(command.Name);
}
}
private void Execute(object sender, EventArgs e)
{
DTE2 dte = package.GetServiceAsync(typeof(DTE2)) as DTE2;
ThreadHelper.ThrowIfNotOnUIThread();
ExecuteCommand(dte, string.Format("View.ClassView"));
}
}
</code>
他的代码:
var dte = (DTE2)ServiceProvider.GetService(typeof(DTE));
【问题讨论】:
标签: c# windows visual-studio visual-studio-extensions service-provider