我正在对从模板创建项目的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界面?我找不到它。
如果不可能,至少可以确定扩展是在实验实例中运行还是非实验性?我可以使用该信息找到扩展目录。
答案 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