Dav*_*mer 27 c# solution vspackage visual-studio vs-extensibility
以下是如何从加载项获取当前解决方案目录:
_applicationObject = (DTE2)application; // retrieved from OnConnection method
string solutionDir = System.IO.Path.GetDirectoryName(_applicationObject.Solution.FullName);
Run Code Online (Sandbox Code Playgroud)
你会如何通过VSPackage做到这一点?
我正在将Visual Studio插件迁移到VSPackage,因为我打算添加一些需要与IDE更深入集成的用户控件.
我发现了一些关于加载项与集成包的相对优点的一些很好的参考,例如:http: //nayyeri.net/visual-studio-addin-vs-integration-package-part-1
以及关于VSPackages上的msdn的一些很好的教程,例如:http: //msdn.microsoft.com/en-us/library/cc138589.aspx
我还没有找到关于加载项(例如DTE)中的更高级接口如何映射到VSPackage中的低级接口的良好引用(在msdn或其他方面).
有没有什么好的参考资料来帮助从附加接口到VSPackage接口的一般映射?
Dav*_*mer 28
我找到了具体问题的答案.可以通过以下GetService()方法检索VisualStudio.DTE对象:
// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
Run Code Online (Sandbox Code Playgroud)
您可以从以下功能之一获取DTE对象:
public static DTE GetCurrentDTE(IServiceProvider provider)
{
/*ENVDTE. */DTE vs = (DTE)provider.GetService(typeof(DTE));
if (vs == null) throw new InvalidOperationException("DTE not found.");
return vs;
}
public static DTE GetCurrentDTE()
{
return GetCurrentDTE(/* Microsoft.VisualStudio.Shell. */ServiceProvider.GlobalProvider);
}
Run Code Online (Sandbox Code Playgroud)
在这之后,你可以得到积极Solution的DTE.Solution和 Solution从路径DTE.Solution.Path属性.