当我从Visual Studio的加载项菜单中删除加载项时,它不会从内存中卸载.有谁知道我是否可以为我的加载项(在C#中)编写一些强制卸载的代码.这甚至可能,还是我必须重启VS?
我有一个VS 2013项目模板,其中包含如下项目
<ProjectItem ReplaceParameters="true" TargetFileName="Target.xml">Target.xml</ProjectItem>
Run Code Online (Sandbox Code Playgroud)
我想要的是"Target.xml"是MyProjectName.xml.
我知道我可以在文件中使用变量但不能在名称中使用变量.
谢谢
G
给出了两个VSX项目的演示解决方案:1.添加新项目 - >可扩展性 - >项目模板 - "ItemTemplate1"2.添加新项目 - >可扩展性 - > VSIX项目 - "VSIXProject1"
我没有对"ItemTemplate1"进行任何更改,因此它构成了默认项模板(ItemTemplate1.vstemplate):
<VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>ItemTemplate1</Name>
<Description><No description available></Description>
<Icon>ItemTemplate1.ico</Icon>
<TemplateID>e298765c-97b8-4f4c-9b7b-a6b368f914df</TemplateID>
<ProjectType>CSharp</ProjectType>
<RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>
<NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
<DefaultName>Class.cs</DefaultName>
</TemplateData>
<TemplateContent>
<References>
<Reference>
<Assembly>System</Assembly>
</Reference>
</References>
<ProjectItem ReplaceParameters="true">Class.cs</ProjectItem>
</TemplateContent>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)
在VSIXProject1中,我只编辑了source.extension.vsixmanifest,添加了对ItemTemplates1项目的引用.在此之后,vsixmanifest只包含一个内容描述:
<Content>
<ItemTemplate>ItemTemplates</ItemTemplate>
</Content>
Run Code Online (Sandbox Code Playgroud)
然后建造它.在bin/debug中我得到了VSIXProject1.vsix,在其中我可以在ItemTemplates\CSharp\1033\ItemTemplate1.zip文件中看到我的项目模板.
一切看起来都很棒!
除了它不起作用的事实.我运行VSIXProject1.vsix,安装了vsix(我可以在扩展管理器中看到它),但没有任何模板被复制到"C:\ Users\{UserName}\Documents\Visual Studio 2010\Templates\ItemTemplates"!
是否可以拦截visual studio的粘贴事件以转换粘贴的文本?我知道我可以编写自己的命令来执行智能粘贴,但对于大多数人来说,将此命令映射到键盘快捷键是一件苦差事.此外,大多数人习惯使用Ctrl + V. 我有机会在那里插入我的商品吗?
我想创建一个可视DSL(盒子和箭头).我发现我可以使用微软的可视化和建模SDK(用于VS2010的DSL工具续集)创建这样的DSL ,并且还有一个关于这个主题的实验室.但是,一旦我创建了DSL,这将需要Visual Studio 2010来托管我的设计器.
有没有办法不要求Visual Studio?使用Windows Workflow Foundation(WF),可以在您自己的应用程序中托管工作流设计器,因此这不是不可能的.
也欢迎其他方法的建议.
我正在开发Visual Studio 2010扩展,我的窗口内已经有一个工具栏.在那个工具栏上,我有一个按钮,我想给一个图标 - 我自己的图标!我读过这篇文章很棒但是......它解释了如何替换图标.
我想添加一个额外的图标.
我怎么做到这一点?
我想创建自己的具有全球知名度的服务。为了实现这一点,我遵循了这个示例解决方案。
一切顺利,我可以在一个类中调用我的服务,该类扩展自 Package 抽象类,如下所示:
public class ClientPackage : Package
{
private void GetGlobalServiceCallback(object sender, EventArgs args)
{
IMyGlobalService service = GetService(typeof(SMyGlobalService)) as IMyGlobalService;
}
}
Run Code Online (Sandbox Code Playgroud)
因为我在一个包中,所以我可以轻松调用 GetService 并且可以获得我的服务。但是,如果我想从一个不扩展 Package 抽象类的类获取服务,该怎么办?
例如,我有一个类,它实现了 ITagger 接口。如果我想获取此类中的服务,我必须以这种方式使用 Package.GetGlobalService() 方法:
var txtMgr = (IVsTextManager)Package.GetGlobalService(typeof(SVsTextManager));
Run Code Online (Sandbox Code Playgroud)
我尝试使用 Package.GetGlobalServie() 获取自己的服务,但总是得到 null。链接的示例代码不包含我的问题的解决方案。
我可能错过了什么或者我在获得服务时遇到了错误的情况吗?
编辑:
好吧,假设我必须使用 MEF 来获取我的服务,因为我无法使用 Package.GetGlobalService() 获取我的服务。
我有一个包含 2 个项目的解决方案。一种是类库,其中包含这样的接口:
public interface INamesAccessor
{
IEnumerable<string> GetNames();
}
Run Code Online (Sandbox Code Playgroud)
另一个项目是 VSPackage(与第一个项目有参考),它也实现了我的接口:
[Export(typeof(INamesAccessor))]
public sealed class BitbucketExtensionPackage : Package, INamesAccessor
{
private IEnumerable<string> _names { get; set; } …Run Code Online (Sandbox Code Playgroud)