我只是为Visual Studio 2010编写VSIX扩展,无法弄清楚如何调试它.
一种显而易见的方法是输出消息.扩展模板使用Trace.WriteLine()
.但在哪里可以找到它的输出?
我目前正在尝试为Visual Studio Express 2013安装XNA Game Studio.我在实际安装XNA框架之前意外地运行了.vsix程序.
安装它并重新运行.vsix之后,我收到一条消息错误,指出已经安装了扩展.这不是假的.
我已经尝试了很多东西来"删除"空的扩展:进入%LocalAppData%\ Microsoft\VisualStudio并试图找到扩展名,但发现自己没有任何东西,例如.
我想知道如何正确卸载并重新安装框架.
Visual Studio中安装的自定义扩展在哪里?我知道你可以获得路径ExtensionManager.GetInstalledExtensions()
,但似乎没有找到的路径对应于我的扩展.
在尝试添加对VSIX的引用时,它通常会从.csproj中的引用中提取它.但是,如果引用不在.csproj中,因为它们现在位于project.json文件中,那么它们不会被拉到vsix.然后解决方案可以编译,但是当安装到Visual Studio中时,扩展会因"找不到文件"错误而失败(因为未复制到VSIX的程序集).
我尝试使用清单的部分,如下所示:
<Asset Type="Microsoft.VisualStudio.Assembly" d:Source="Project" d:ProjectName="*PROJECTNAME*" Path="|*ASSEMBLYNAME*|" AssemblyName="|*ASSEMBLYNAME*;AssemblyName|" />
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为它无法识别包引用.
经过一些研究后,我看到了与PCL类似的问题,但是,没有答案而且问题类型不同:MEF With Portable Class library using Microsoft Composition MEF2抛出文件未找到异常
在同一个注释中,这似乎是一个可接受的解决方法:VSIX与项目模板和NuGet包,但据我所知,它意味着在安装过程中使用该包.除此之外,它不适用于我们的情况,因为他们需要指定包版本,我们正在使用project.json,所以我们可以使用浮动版本(即:2.0.*)
有没有办法引用这个project.json引用我们缺少的?也许是一种解决方法?我发现的解决方案似乎都需要在某处"粘贴"de DLL,对于浮动版本来说并不方便.
提前感谢任何帮助或输入.
编辑/更新:由于VSIX会自动推送CSPROJ中引用的任何程序集(而不是项目本身),因此尝试在项目级别获取DLL似乎不太可能.经过多次尝试,我认为有效的解决方法是从输出文件夹中获取程序集.但是,据我所知,VSIX没有办法做到这一点,还是做到了?
我遇到的问题是我安装了VS 2012和VS 2013,当我下载VSIX-File并使用Visual Studio版本选择器打开它时,VS会打开文件,但不是安装它VS而是打开文件,就像它是一个未知二进制格式.
附图显示了如何打开VSIX文件(每个文件都会发生......这只是一个例子):
这两篇文章都讨论了如何为VS2013开发扩展,但两者都假定您有一个可用的扩展项目类型
我一直在研究VS扩展,使用SideWaffle创建一些带有一些锅炉代码的文件,我遇到了一个问题,每当我添加一个新项目时,我的boilercode项目将在"我的自定义模板"下.我在template-builder.props文件中找到了这个并将其更新为"Test",但是当我再次尝试时,我同时拥有"我的自定义模板"和"测试",两者都包含相同的扩展名.
我想VS可能已经缓存了旧名称,所以我从VS卸载了扩展并重新启动.现在该项目根本不会构建并给出错误:
Extension 'ProjName..00000000-0000-0000-0000-000000000000' could not be found.
Please make sure the extension has been installed.
Run Code Online (Sandbox Code Playgroud)
我尝试使用Debug文件夹中的.vsix重新安装扩展并重新启动VS,但是我得到了同样的错误).我在网上找不到任何关于此的信息,说实话,我很困惑为什么项目需要自己安装才能构建.
我该怎么做才能让这个项目再次建成?
我在VS2013下使用VSIX Manifest Designer.我添加了Microsoft.VisualStudio.Pro产品标识符和[10.0,13.0]版本范围来安装目标.尽管如此,我仍然没有看到我的VS2010 Professional作为可用的安装目标:
source.extension.vsixmanifest文件内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="ae98c9e5-8e14-4c92-b45a-c4fd24a49123" Version="1.0" Language="en-US" Publisher="whosoever" />
<DisplayName>MyExtension</DisplayName>
<Description xml:space="preserve">whosoever</Description>
<MoreInfo>http://www.myextension.com</MoreInfo>
<License>LICENSE.txt</License>
<Icon>icon.png</Icon>
<PreviewImage>screenshot.png</PreviewImage>
</Metadata>
<Installation InstalledByMsi="false">
<InstallationTarget Version="[10.0,13.0)" Id="Microsoft.VisualStudio.Pro" />
</Installation>
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="4.5" />
<Dependency Id="Microsoft.VisualStudio.MPF.11.0" DisplayName="Visual Studio MPF 11.0" d:Source="Installed" Version="11.0" />
</Dependencies>
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
</Assets>
</PackageManifest>
Run Code Online (Sandbox Code Playgroud)
应该更改什么才能将此扩展安装到VS2010,2012和2013?
我想为VS2010开发一个扩展,这将允许我为语法突出显示一些额外的功能.
我安装了SDK,我该怎么做?
请给我一些小片段(或代码链接),我可以看到如何开始.
注意:我是否必须检查整个代码块,或者SDK告诉我每个单词是什么,如何声明等等?
我编写了一个观察Windows.Forms设计器窗口的Visual Studio 2013扩展.当开发人员在设计器窗口中更改控件时,扩展会尝试验证结果是否与我们的ui样式指南一致.如果发现可能的违规,它们将列在工具窗口中.一切正常.但是现在我想在设计器窗口中标记不一致的控件,例如使用红框或类似的东西.
不幸的是,我没有找到在设计器窗口中绘制控件装饰的方法.我知道如果你开发自己的装饰品,你可以画出那些装饰品ControlDesigner
,但我需要从控制设计师的"外部"开始.我只有IDesignerHost
来自Dte2.ActiveWindow
并且可以通过该主机访问Controls和ControlDesigners.我找不到任何方法来从ControlDesigners的"外部"添加装饰品.我现在的解决方法是捕获控件的Paint-Events并尝试从那里绘制我的装饰品.这对于所有控件(即ComboBox等)都不适用,因为并非所有控件都允许您使用它们.所以我不得不使用他们的父控件的Paint事件.此解决方案还有其他缺点.
我希望有人可以告诉我是否有更好的方法.我敢肯定,必须有一个:如果您使用菜单 - >查看 - > Tab键顺序(不知道正确的英文菜单标题,我使用的是德国IDE),您可以看到IDE本身能够装饰控件(没有截图,因为它是我在SO上的第一篇文章),我确信它不会像我一样使用解决方法.它是如何做到的?
我几周来一直在谷歌上搜索.感谢您的帮助,建议,研究起点......
更新:
也许这个截图有点清晰:
从View菜单中选择Tab顺序时,Visual Studio显示的是蓝色编号的插入符号.我的问题是如何通过IDE完成这项工作.
如上所述,我试图Paint
在控件的情况下执行此操作,但例如ComboBox实际上不支持该事件.如果我使用父项的Paint
事件,我只能在子控件周围绘制,因为它们是在父项之后绘制的.
我还想过在控件或ControlDesigner
s 上使用反射,但我不确定如何挂钩受保护的OnPaintAdornments
方法.我不认为IDE开发人员使用那些"肮脏"的技巧.
vsix ×10
c# ×2
vsixmanifest ×2
debugging ×1
manifest ×1
mef ×1
project.json ×1
sidewaffle ×1
uninstall ×1
vsx ×1
wpf ×1
xna ×1