问题
My team absolutely loves using regions, and with that in mind it's pretty much become a de-facto standard in our code. I recently came to realization that I'm sick of writing or ctrl+c / ctrl+v'ing these in every time I create a class, test method, etc...
I was wondering if it is possible (via macros or some other functionality) to have Visual Studio automatically add these into your code.
For example, If I add a new class file to my project, can you perform some sort of magic to have visual studio generate the file as:
namespace Test
{
class MyClass
{
#region ------------ members --------------
#endregion
#region ------------ properties --------------
#endregion
#region ------------ methods --------------
#endregion
}
}
Where I really get annoyed by not currently knowing how to do this, is when I'm writing unit tests. This may be a bit trickier, but I was trying to find a way to add --set up--
and --run test--
regions automatically to test methods because our team is adamant about using them.
So, when I go to create a new test method
[TestMethod]
public void WhenCondition_WillProduceExpectedResult()
{
}
Visual Studio would automatically add these two regions to the method, such as:
[TestMethod]
public void WhenCondition_WillProduceExpectedResult()
{
#region ------------- set up -------------
#endregion
#region ------------- run test -------------
#endregion
}
Not sure if this can be done, and if it can, whether it'd be via a vs-macro, or extension. Any help is much appreciated!
回答1:
You could create a simple code snippet like the following one:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Simple</Title>
<Shortcut>simple</Shortcut>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>name</ID>
<ToolTip>Replace with the name of the action</ToolTip>
<Default>Action</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[
public void $name$()
{
#region ------------- set up -------------
#endregion
#region ------------- run test -------------
#endregion
}
]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Save that file into C:\Users\<your_user>\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets
.
Now you just need to reopen Visual Studio, type 'simple' into a class and press Tab key twice.
回答2:
Two ways I know:
Create a snippet as per this MSDN guide.
Downloading the Visual Studio Extension Productivity Power Tools which has a "Surround" feature. This surrounds the user made selection with the selected snippet, for example #region #endregion
or if statement.
回答3:
Don't know why so many people speak out against regions; they help me categorize my code very easily. What I use is a macro placed on one of my keyboard buttons that automatically inserts the regions for me. One tip I can give you is to put a small delay between each keypress if this is possible because VS sometimes misses characters otherwise.
Hope this helps!
回答4:
Use the following snippet
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>#Classregion</Title>
<Shortcut>#Classregion</Shortcut>
<Description>Code snippet for #Classregion</Description>
<Author>Author Name</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>name</ID>
<ToolTip>Region name</ToolTip>
<Default>MyRegion</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[
#region ------------- Members ---------------
$selected$ $end$
#endregion
#region --------------- Properties ---------------
$selected$ $end$
#endregion
#region --------------- Methods ---------------
$selected$ $end$
#endregion
]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Save it under C:\Users\\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets
Later it will be accessible in C# code, by Right-Click > Insert Snippet > My Code Snippets > #Classregion
回答5:
And I agree that regions a are a bad idea but to each his own.
You might want to take a look at NArrange.
回答6:
If you have Resharper then the File Structure window is very handy for managing regions, allowing simple drag and drop to move blocks of methods/properties etc. around. It shows your regions (which are collapsible) & syncs with the main code view too:
https://www.jetbrains.com/help/resharper/Reference__Windows__File_Structure_Window.html
eg A region called preview shown here:
回答7:
I prefer editing the class template as described in Sam Harwell's answer:
https://stackoverflow.com/a/2072717
You can open the class.cs file at your Visual Studio version's class template location. For example, Visual Studio 2017 Enterprise's location is:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs
I open that file using a text editor and add regions to it. All new classes will then be created with the regions.
来源:https://stackoverflow.com/questions/13567594/automatically-add-regions-to-code-in-visual-studio