查找Visual Studio 2010扩展的主目录

时间:2012-01-06 17:43:02

标签: visual-studio visual-studio-2010 visual-studio-extensions

我正在对从模板创建项目的Visual Studio向导进行更改,并且需要将对程序集的引用添加到也位于扩展目录中的项目中。所以我需要设置<hintpath>

我无法弄清楚正在运行的VS扩展如何发现其扩展目录,这是一个像这样的目录名:

  

%USERPROFILE%\应用程序数据\本地\微软\ VisualStudio的\ 10.0 \扩展\ myCompany中\ myExtension

使用System.Reflection.Assembly.GetExecutingAssembly().CodeBase产生:

  

“C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ myCompany.myExtension \ v4.0_1.0.0.0__936015a19c3638eb \ myCompany.myExtension.dll”

不幸的是,没有帮助。使用GetCallingAssembly()并不是更好 - 它指向MSIL_GAC中的另一个目录。

是否有返回此信息的Visual Studio界面?我找不到它。

如果不可能,至少可以确定扩展是在实验实例中运行还是非实验性?我可以使用该信息找到扩展目录。

2 个答案:

答案 0 :(得分:4)

也许看看IInstalledExtension.InstallPath。您可以通过IVsExtensionManager获得IInstalledExtension

不幸的是,评论中的消息表明这不是正确的做事方式:

  

虽然此API支持Extension Manager基础结构,但我们建议您不要使用它,因为它可能会发生变化。

编辑:以下是代码:

    static IVsExtensionManager GetExtensionManager()
    {
        return myPackage.GetService(System.typeof(IVsExtensionManager)) as IVsExtensionManager;
    }
    static IInstalledExtension GetExtension(string identifier)
    {
        return GetExtensionManager().GetInstalledExtension(identifier);
    }
    static string GetExtensionDirectory(string identifier)
    {
        return GetExtension(identifier).InstallPath;
    }

string identifier是您在扩展程序source.extension.vsixmanifest文件的“ID”字段中输入的内容。它默认为包GUID。

答案 1 :(得分:1)

很抱歉找到一个陈旧的问题......

我正在研究类似的问题,并且已经实现了Extension Manager,但我认为这非常糟糕,但如果您确实想要使用它,这些链接也会有所帮助:

https://stackoverflow.com/a/24294185

http://blog.ninlabs.com/2011/04/auto-update-visual-studio-extensions/

但是,我决定研究Asp.Net.Scaffolding中CodeGenerator如何访问模板文件。事实证明,很容易......

var path = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "MyPath");

Simples