标签: vsix

检测VSPackage中的Visual Studio版本

如何检查/检测在我的VSPackage下运行的Visual Studio版本?

我无法从注册表中获取,因为计算机可能安装了多个版本,所以我猜有一个能够获得它的API.

有人知道如何使用C#从托管的Visual Studio包中获取它吗?

.net vspackage visual-studio vs-extensibility vsix

13
推荐指数
2
解决办法
3156
查看次数

Visual Studio扩展中的颜色

我正在开发一个VS扩展,我希望实现我的UI将使用颜色(字体,背景等),具体取决于所选的VS颜色方案.做这个的最好方式是什么.我可以绑定WPF中的一些静态资源吗?

wpf color-scheme visual-studio vsix

12
推荐指数
1
解决办法
3097
查看次数

将调试器附加到以编程方式在另一个应用程序域中运行的代码

我正在开发Visual Studio扩展,其中一个函数创建一个新的应用程序域并将程序集加载到该应用程序域中.然后它在app域中运行一些函数.我想做什么,并且不确定是否可能,是否有我的扩展程序将调试器附加到新应用程序域中运行的代码,因此当该代码失败时,我实际上可以看到发生了什么.现在我正在盲目地调试动力加载的组件是一种痛苦.

所以我有一个创建我的app域的类,如下所示:

domain = AppDomain.CreateDomain("Test_AppDomain", 
    AppDomain.CurrentDomain.Evidence, 
    AppDomain.CurrentDomain.SetupInformation);
Run Code Online (Sandbox Code Playgroud)

然后创建一个这样的对象:

myCollection = domain.CreateInstanceAndUnwrap(
            typeof(MyCollection).Assembly.FullName,
            typeof(MyCollection).FullName,
            false,
            BindingFlags.Default,
            null,
            new object[] { assemblyPath }, null, null);
Run Code Online (Sandbox Code Playgroud)

MyCollection 在它的构造函数中执行类似的操作:

_assembly = Assembly.LoadFrom(assemblyPath);
Run Code Online (Sandbox Code Playgroud)

所以现在已经加载了程序集,Test_AppDomain因为该MyCollection对象是在该域中创建的.这是我需要能够附加调试器的加载程序集.

在某些时候myCollection创建一个对象的实例并挂钩一些事件:

currentObject = Activator.CreateInstance(objectType) as IObjectBase;
proxy.RunRequested += (o, e) => { currentObject?.Run(); };
Run Code Online (Sandbox Code Playgroud)

基本上我有处理程序RunRequested和运行的地方currentObject?.Run(),我想要附加一个调试器,虽然它可能不是一个问题(并且可能实际上工作得更好)如果先前附加了调试器.

有没有办法实现这一目标?当用户触发将导致在Run调用的新AppDomain中创建的对象的功能的事件时,是否可以以编程方式附加调试器?如何附加调试器(而不是扩展本身)?

我试过这样的事情:

var processes = dte.Debugger.LocalProcesses.Cast<EnvDTE.Process>();
var currentProcess = System.Diagnostics.Process.GetCurrentProcess().Id;
var process = processes.FirstOrDefault(p => p.ProcessID == currentProcess);
process?.Attach();
Run Code Online (Sandbox Code Playgroud)

但似乎内部的id System.Diagnostics.Process.GetCurrentProcess().Id不存在LocalProcesses …

c# debugging vsix

12
推荐指数
1
解决办法
938
查看次数

访问Visual Studio 2017的私有注册表配置单元

Visual Studio使用私有注册表配置单元而不是"污染"系统注册表 - 通常在这样的地方找到:

C:\Users\Abx\AppData\Local\Microsoft\VisualStudio\15.0_4b0ba1c0\privateregistry.bin

[为了确定已安装的扩展,我们需要查看以下密钥: Software\Microsoft\VisualStudio\15.0_4b0ba1c0\ExtensionManager\EnabledExtensions]

在C#中通过键加载和访问此文件的最简单方法是什么?

c# registry vsix visual-studio-2017

12
推荐指数
1
解决办法
3123
查看次数

访问Visual Studio扩展中的当前代码窗格

我在代码视图中使用右键菜单编写了visual studio(2010)扩展.我希望能够从我的菜单项事件处理程序中检查当前代码,但是无法在对象模型中找到某个位置来执行此操作.

如何在visual studio扩展中访问当前窗口中的代码?

编辑

下面是我用来获取当前文档文本的代码

 DTE dte = Package.GetGlobalService(typeof(DTE)) as DTE ;
 TextDocument activeDoc = dte.ActiveDocument.Object() as TextDocument;

 var text = activeDoc.CreateEditPoint(activeDoc.StartPoint).GetText(activeDoc.EndPoint);
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 vspackage vsix visual-studio-extensions

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

如何为多个Visual Studio版本打包基于VSIX的扩展

我正在维护一个公司内部Visual Studio扩展,它被打包并部署为VSIX容器.此扩展目前针对VS 2010.它使用几个VS API DLL并引用它们的VS 2010版本.

我目前正在迁移此扩展程序以与VS 2012/2013兼容.我已经发现可以手动编辑旧的VSIX清单以允许扩展另外安装到VS 2012/2013 - 这非常有效.

但是我目前使用的一些VS 2010 API与VS 2012 ++不兼容,我需要更新它们 - 具有放弃向后兼容性的效果.

我的问题是:我应该如何构建我的解决方案和VSIX以便它与VS 2010,2012和2013兼容.是否可以使用一个针对VS 2010的DLL和一个针对VS 2012/2013的DLL并选择一个使用的在延长加载时间?

旁注:我正在使用MEF来构建我的内部功能单元.这会让它变得更容易吗?

c# visual-studio-2010 visual-studio vsix visual-studio-2012

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

在VS2012下开发VSIX for VS20?

有没有办法在Visual Studio 2012下开发VSIX扩展,然后可以在Visual Studio 2010中安装?我已经尝试为Microsoft.VisualStudio.Pro目标设置版本范围[10.0,11.0],但是当我启动已编译的VSIX时,它只提供VS2012安装.

我知道可以在VS2010下开发VSIX,这适用于VS2012,但需要手动编辑.vsixmanifest文件.但我想知道是否有可能使用更新的VS2012进行开发?

visual-studio-2010 vsix visual-studio-extensions visual-studio-2012

10
推荐指数
1
解决办法
2354
查看次数

VSIX包构建失败而没有显示原因(Visual Studio错误)

我必须启用MSBuild项目构建输出详细程度的诊断模式才能看到:

1>Done executing task "EnableExtension" -- FAILED. (TaskId:81)
1>Done building target "DeployVsixExtensionFiles" in project "myextension.csproj" -- FAILED.: (TargetId:93)
...
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.27
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法调试我正在处理的Visual Studio扩展包,因为构建输出表明某些内容已失败.什么是有线的,包含所有内容(包括vsix包)的obj和bin文件夹已经创建.我真的不知道我改变了什么特别的,因为几个小时前一切都很好.

我怎样才能调查出了什么问题?

顺便说一句:我正在使用VS 2012 Premium Update 1

编辑:

我记得我做过的事.在处于调试模式时,我输入了Tools - > Extensions and Updates,并卸载了我当前调试的扩展(在该操作之后没有重新启动VS).进一步的调试尝试(在关闭VS的实验实例后的F5)导致这种神秘的构建行为.

vspackage visual-studio vs-extensibility vsix

10
推荐指数
1
解决办法
8270
查看次数

调试时VS2012的VSIX扩展未运行

我在Visual Studio 2012中创建了一个新的VSIX扩展项目,并编写了一个MEF分类器(作为测试),它应该只是突出显示.mylang文件中的所有文本.以下是我的.NET 4.5代码的相关部分:

internal static class MyLangLanguage
{
    public const string ContentType = "mylang";

    public const string FileExtension = ".mylang";

    [Export(typeof(ClassificationTypeDefinition))]
    [Name(ContentType)]
    [BaseDefinition("code")]
    internal static ContentTypeDefinition MyLangSyntaxContentTypeDefinition = null;

    [Export]
    [FileExtension(FileExtension)]
    [ContentType(ContentType)]
    internal static FileExtensionToContentTypeDefinition MyLangSyntaxFileExtensionDefinition = null;
}

[Export(typeof(IClassifierProvider))]
[ContentType(MyLangLanguage.ContentType)]
[Name("MyLangSyntaxProvider")]
internal sealed class MyLangSyntaxProvider : IClassifierProvider
{
    [Import]
    internal IClassificationTypeRegistryService ClassificationRegistry = null;

    public IClassifier GetClassifier(ITextBuffer buffer)
    {
        return buffer.Properties.GetOrCreateSingletonProperty(() => new MyLangSyntax(ClassificationRegistry, buffer));
    }
}

internal sealed class MyLangSyntax : IClassifier { }
Run Code Online (Sandbox Code Playgroud)

这是完整的代码 …

c# debugging vsix visual-studio-2012

10
推荐指数
1
解决办法
4191
查看次数

如何从Visual Studio扩展和新的csproj格式获取IntermediateOutputPath

我有一个csproj覆盖的新式项目文件IntermediateOutputPath.它看起来像这样:

<PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
    <IntermediateOutputPath>new\path\to\obj</IntermediateOutputPath>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

问题是,我的Visual Studio扩展无法访问IntermediateOutputPath属性.Project.Properties与旧的项目格式相比,似乎有更少的东西.

我也尝试project.ConfigurationManager.ActiveConfiguration.Properties过类似的成功.

有没有办法从Visual Studio扩展中获取此信息?

c# visual-studio vsix vssdk

10
推荐指数
1
解决办法
635
查看次数