We welcome contributions! However, we do have some requests on how contributions should be done. Please read them in order to avoid surprises down the road.
The issue tracker of each project has a list of items that you can start working on:
-
Features. Those are issues marked as 'enhancement'.
-
Bugs. Those are issues marked as 'bug'.
In order to avoid overlap, it's always a good idea to comment on the item and let everybody know that you want to work on it.
- Make sure that there is a corresponding issue for your change first. If there is none, create one.
- Create a fork in GitHub
- Create a branch off the
master
branch. Name it something that that makes sense, such asissue-123
orgithubhandle-issue
. This makes it easy for everyone to figure out what the branch is used for. It also makes it easier to isolate your change from incoming changes from the origin. - Commit your changes and push your changes to GitHub
- Create a pull request against the origin's
master
branch
- DO follow our coding style (see below)
- DO include tests when adding new features. When fixing bugs, start with adding a test that highlights how the current behavior is broken.
- DO keep the discussions focused. When a new or related topic comes up it's often better to create new issue than to side track the discussion.
- DO blog and tweet (or whatever) about your contributions, frequently!
- DON'T surprise us with big pull requests. Instead, file an issue and start a discussion so we can agree on a direction before you invest a large amount of time.
- DON'T commit code that you didn't write. If you find MIT or Apache 2 licensed code that you think is a good fit to add to .NET Core, file an issue and start a discussion before proceeding.
The general rule we follow is "use Visual Studio defaults".
- We use Allman style braces
- We use four spaces of indentation (no tabs)
- We use "_camelCase" private members and use "readonly" where possible
- We avoid
this.
unless absolutely necessary - We always specify the visibility, even if it's the default (i.e.
private string _foo
notstring _foo
) - Namespace imports should be specified at the top of the file, outside of
namespace
declarations and should be sorted alphabetically, withSystem.
namespaces at the top and blank lines between different top level groups
using System.Aardvarks;
using System.IO;
using System.Zebras;
using Microsoft.CoolStuff;
using Microsoft.CoolStuff.Build;
using Zebra.Crossing;
namespace System.More.AndMore
{
public class MyClass
{
private readonly IAbstraction _something;
public MyClass(IAbstraction something)
{
_something = something;
}
public IAbstraction SomethingService
{
get { return _something; }
}
}
}