相关疑难解决方法(0)

在不编码插件时获取当前的EnvDTE或IServiceProvider

我正在编写一些设计时间代码.我想使用这个片段:( 在这里找到)

var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
    var solution = dte.Solution;
    if (solution != null)
    {
        string baseDir = Path.GetDirectoryName(solution.FullName);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是这不能编译.(GetService不是已知的方法调用)我尝试添加Microsoft.VisualStudio.Shell(和Microsoft.VisualStudio.Shell.10.0),但它没有帮助.

在互联网上环顾四周,我发现你需要一个IServiceProvider来调用它.

但所有显示如何使IServiceProvider使用EnvDTE的示例.

所以,要获得当前的EnvDTE,我需要IServiceProvider.但要获得IServiceProvider,我需要一个EnvDTE.(我的桶里有一个洞......)

所以,这是我的问题:

在普通的WPF应用程序中,如何获取EnvDTE 的当前实例

注意:我不是在寻找任何旧的EnvDTE实例.我需要一个用于我当前的Visual Studio实例(我一次运行3-4个Visual Studio实例.)

.net visual-studio-2010 visual-studio envdte visual-studio-extensions

11
推荐指数
1
解决办法
7454
查看次数

在Visual C#2010中获取DTE2对象的引用

我想在Visual Studio 2010中使用带有C#的DTE2对象来获得对当前解决方案的引用.

我首先尝试了以下代码:

var dte = Marshal.GetActiveObject("VisualStudio.DTE.10.0") as EnvDTE80.DTE2;
Run Code Online (Sandbox Code Playgroud)

但是当我打开2个解决方案,并且这个代码在第一个解决方案中时,我得不到对当前解决方案的引用,而是对我加载的最后一个解决方案的引用.我需要当前的解决方案......

在互联网上搜索,我发现以下解决方案如何从VSPackage获取当前的解决方案目录?:

// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));
Run Code Online (Sandbox Code Playgroud)

但是当我使用它时,我的dte对象总是为NULL.

那么如何使用C#on .net framework 4.0获取VS2010中当前的解决方案对象?

c# add-in visual-studio-2010 envdte

10
推荐指数
2
解决办法
8833
查看次数

使用MarshalAs进行P/Invoke签名的F#语法

我不确定这个的语法.我正在尝试将这个C#代码翻译成F#.

struct LASTINPUTINFO
{
    public uint cbSize;
    public uint dwTime;
}

public class IdleTimer
{
    [DllImport("User32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
}
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的.

type LASTINPUTINFO = {
    cbSize : UInt32;
    dwTime : UInt32;
}

type IdleTimer =
    [<DllImport("User32.dll")>]
    [<return: MarshalAs(UnmanagedType.Bool)>]
    extern GetLastInputInfo(plii : LASTINPUTINFO ref)
Run Code Online (Sandbox Code Playgroud)

pinvoke winapi f# marshalling

7
推荐指数
2
解决办法
2649
查看次数