【问题标题】:Get namespace in a Code Snippet在代码片段中获取命名空间
【发布时间】:2012-09-25 15:50:03
【问题描述】:

Microsoft 链接here 列出了我们可以使用的三种方法。

但是我们如何获得当前的命名空间呢? 我看到有一个类似的问题,但答案是使用宏,它不能解决这个特定问题。

NameSpace() 做这样的事情:

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            .
            .
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>namespace</ID> 
                    <Function>NameSpace()</Function>                     
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    $namespace$
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

【问题讨论】:

  • 那么你是在写插件还是什么?
  • 是的,基本上是添加更多的 sn-ps 以使 C# 以外的其他语言的编码速度更快。

标签: c# visual-studio-2010 visual-studio-2008 code-snippets visual-studio-sdk


【解决方案1】:

发现这是可以做到的,它将ExpansionProviderExpansionFunction的类带入画面

对于上面的sn-p,我不得不这样做:

internal class NameSpaceExpansionFunction : ExpansionFunction
    {
        public NameSpaceExpansionFunction(ExpansionProvider provider)
            : base(provider)
        {
        }

        public override string GetCurrentValue()
        {
           //get namespace
           return namespace;
        }
    }

LanguageService 告诉 sn-p 文件在哪里寻找函数的定义:

public class MyLanguageService : LanguageService
    {
        public override ExpansionFunction CreateExpansionFunction(ExpansionProvider provider,
                                                                  string functionName)
        {
            ExpansionFunction function = null;
            if (String.Compare(functionName, "NameSpace", true) == 0)
            {
                function = new NameSpaceExpansionFunction(provider);
            }
            return function;
        }
    }

这更像是一个教程问题,因此我提供了上面的链接。应该会有所帮助。为我工作:)

【讨论】:

  • 那么 NamespaceExpansionFunction 和 MyLanguageService 去哪儿了?
  • MyLanguageService 应该进入您的 VSPackage 项目。以下链接解释了有关 VSPackage 开发的更多信息:msdn.microsoft.com/en-us/library/dn705845.aspx
  • 您的整个 LanguageService 类是什么样的?还有许多其他抽象方法需要重载。此外,GetCurrentValue() 方法似乎并不完整。什么是命名空间?为什么后面是分号?
  • 您好,您需要通过 VSPackage 教程了解 LanguageService 类的外观。您需要根据您的要求覆盖方法。上面的 GetCurrentValue 是一个示例而不是实现。我们无法运行它。它只是表明我们可以在 sn-p 插入期间使用“一些逻辑”来获取命名空间。查看 MSDN 以获取 ExpansionFunction 文档以获取更多信息。
  • 据我了解,如果您正在创建一门新语言,您会创建它,但您不能说,在 C# 中使用它,对吗?
猜你喜欢
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多