在Visual Studio中将其他命名空间导入为项目默认值

时间:2013-12-12 18:38:17

标签: c# visual-studio ide resharper

有没有办法添加到在Visual Studio中选择类模板时添加的默认命名空间?

我的问题是添加一个新类(在我的例子中是一个C#),不包括我的公共库。无论是一次又一次地不断添加内部自定义API的命名空间,都是一个巨大的生产力。多年来由于分裂,这个问题变得更糟。即使.NET导入的规模也在增长。

我尝试使用Resharper虽然它有所帮助,但它没有完全解决问题。在我告诉它自动导入之前,我仍然需要确切的类型名称。

我也尝试过使用代码片段,虽然很好,创建一个也不是直截了当的,每个新文件需要额外点击几次。

创建新模板也很痛苦。更不用说我们使用从控制器,视图,基本类,接口等各种模板。我们还需要几个版本,因为每个模块通常需要2-3个其他命名空间。然后我们需要在每次有重大框架发布时保持更新,例如。 .NET 2.0项目模板没有LINQ,现在它在每个模板上。然后我们需要在所有Dev机器上保持这些模板同步。底线是我们没有这方面的资源。

我真的只想添加默认导入(每个项目/命名空间),不涉及重新创建所有主要模板。或者为某个给定的项目创建某个命名空间“local”,每次创建一个新类时我都可以停止写一堆“using”语句。

这有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

是的,您可以更改Visual Studio在创建新类型时使用的类模板文件。这些模板位于:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Refactoring

您的方案感兴趣的模板是GenerateTypeInNewFile,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
    <CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
        <CodeSnippet Format="1.0.0">
            <Header>
                <Title>Generate Type In New File</Title>
                <Description>Snippet for generating a type in a new file</Description>
                <Author>Microsoft Corporation</Author>
                <SnippetTypes>
                    <SnippetType>Refactoring</SnippetType>
                </SnippetTypes>
            </Header>
            <Snippet>
                <Declarations>
                    <Literal Editable="true">
                        <ID>namespace</ID>
                        <Default></Default>
                    </Literal>
                    <Literal Editable="true">
                        <ID>modifiers</ID>
                        <Default></Default>
                    </Literal>
                    <Literal Editable="true">
                        <ID>typekind</ID>
                        <Default>class</Default>
                    </Literal>
                    <Literal Editable="true">
                        <ID>typename</ID>
                        <Default>name</Default>
                    </Literal>
                    <Literal Editable="true">
                        <ID>typebase</ID>
                        <Default></Default>
                    </Literal>
                    <Literal>
                        <ID>linqusing</ID>
                        <Function>CheckMinimumTargetFramework(3.5,
                            using System.Linq;)
                        </Function>
                    </Literal>
                </Declarations>
                <Code Language="csharp">
                    <![CDATA[$end$using System;
                        using System.Collections.Generic;$linqusing$
                        using System.Text;

                        namespace $namespace$
                        {
                            $modifiers$ $typekind$ $typename$ $typebase$
                            {
                            }
                        }
                    ]]>
                </Code>
            </Snippet>
        </CodeSnippet>
    </CodeSnippets>

您感兴趣的部分是<Code>部分:

<Code Language="csharp">
    <![CDATA[$end$using System;using System.Collections.Generic;$linqusing$
        using System.Text;

        namespace $namespace$
        {
            $modifiers$ $typekind$ $typename$ $typebase$
            {
            }
        }
    ]]>
</Code>

using xyz.blah.blah.blah之后添加您的using System.Text;命名空间,保存,您添加的下一个课程应该很好。


  

注意:这将改变在Visual Studio中所有项目中添加类的方式,所以要小心!

答案 1 :(得分:1)

如果您使用ReSharper的插入文件功能添加类,则可以编辑转到ReSharper使用的模板 - &gt;模板管理器 - &gt;文件模板。在C#部分下,您可以编辑“类”模板并在顶部添加任何所需的using语句。您可以使用宏来确定根命名空间应该是什么,如果宏不能满足您的需求,您可以write a plugin to add a macro生成命名空间,如下所示: