我开发了一个具有插件机制的应用程序,它是用c ++开发的。
现在,我需要为Visual Studio创建一个扩展,以将窗口消息发送到我的应用程序并在宿主应用程序上远程运行插件。
我在[C ++部分]的操作中没有问题,但无法使扩展程序正常工作。
我下载了Visual Studio 2019的完整SDK,并创建了VSIX项目。
这是我的代码:
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Threading;
using Task = System.Threading.Tasks.Task;
using System.Windows.Forms;
namespace VSIXProject1
{
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[Guid(VSIXProject1Package.PackageGuidString)]
public sealed class VSIXProject1Package : AsyncPackage
{
public const string PackageGuidString = "db4c094c-6f5e-49d9-84dd-4d215fbc76eb";
#region Package Members
protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
MessageBox.Show("InitializeAsync");
var _solutionService = GetService(typeof(IVsBuildableProjectCfg)) as IVsBuildableProjectCfg;
MyBuldActions buildact = new MyBuldActions();
uint pdwCookie;
_solutionService.AdviseBuildStatusCallback(buildact , out pdwCookie);
await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
}
internal class MyBuldActions : IVsBuildStatusCallback
{
int IVsBuildStatusCallback.BuildBegin(ref int pfContinue)
{
MessageBox.Show("BuildBegin");
return 0;
}
int IVsBuildStatusCallback.BuildEnd(int fSuccess)
{
MessageBox.Show("BuildEnd");
return 0;
}
int IVsBuildStatusCallback.Tick(ref int pfContinue)
{
return 0;
}
}
#endregion
}
}
我需要在构建成功的时候注册一个事件[需要获取构建结果],然后获取已构建的dll的地址,如visual studio在输出中显示它。
我需要使此扩展程序在特定类型的项目上工作,例如我的插件模板C ++,如何检测项目类型以及某些地方的标志?这使我的扩展程序了解这是一个c ++和插件类型的项目。
谢谢