在VS 2012中安装扩展后,它被放置在%userprofile%AppDataLocalMicrosoftVisualStudio11.0Extensions
(如果为所有用户安装,则放在C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDEExtensions
中)和随机名称的文件夹中,如"hilatg23.234"或"kcsuvnvi.qtq"。有没有办法指定此文件夹的名称并使此扩展程序安装到文件夹中,例如%userprofile%AppDataLocalMicrosoftVisualStudio11.0ExtensionsMY_EXTENSION_NAME
嗯,不要这么认为。VSIX 安装程序将始终自动选择安装目录。如果要让用户决定安装文件夹,则需要创建MSI
安装包。
不久前,我回答了另一个关于软件包注册的问题;也许提供的一些信息可能有助于创建这样的设置。请参阅帖子:MSI 已安装的 VSPackage 仅在实验实例中加载
如果只想在运行时获取包安装文件夹,可以从包的程序集代码库中获取它,例如:
private static string ObtainInstallationFolder()
{
Type packageType = typeof(MyPackage);
Uri uri = new Uri(packageType.Assembly.CodeBase);
var assemblyFileInfo = new FileInfo(uri.LocalPath);
return assemblyFileInfo.Directory.FullName;
}
我的解决方案:
我使用此 api 获取 vsix 安装物理路径:
string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = AppDataLocalMicrosoftVisualStudio...Extensions[install path]xx.dll
vsix 项目文件中的以下 msbuild 属性控制扩展<文件夹的名称>:文件夹的名称>
<ExtensionInstallationFolder>YourExtensionName</ExtensionInstallationFolder>