Fixed the possible reference comparison.
Moved to VS 2013
Remove virtual member initialization from EF classes.
Fixed NullReferenceException on creating new Repository.
Fix for issue #55 where viewing repository files with a '+' in the path fails with an IIS error

Problem:
By default, IIS 7 (and later) throws a "HTTP Error 404.11 URL Double Escaped" error if the request URL contains characters that represent an escape sequence (http://support.microsoft.com/kb/942076). This is a site/application-level setting and security measure, so it is preferable not to require a change from the default (more secure) value. The '+' character is a legal path character for files in a GIT repository and triggers the above error when used with Bonobo's Tree/Blob/Raw controllers as part of a path reference.

Discarded approach:
Encode the '+' character in URLs with a custom encoding scheme. This idea was rejected because it is non-standard and the encoding/escape character may conflict with valid path names or fail to include other problematic characters (see below for an example).

Proposed approach:
Encode/decode path fragments with the standard "modified base 64 for URL" encoding (http://en.wikipedia.org/wiki/Base_64). This solves the reported problem with '+' as well as avoids similar URL/encoding problems for other troublesome GIT paths. Specifically, this change solves an unreported problem where viewing a file with a '&' character in the path results in "HttpException (0x80004005): A potentially dangerous Request.Path value was detected from the client (&)." (an exception which is not affected by the requestFiltering/allowDoubleEscaping setting for '+'). The downside of the proposed approach is that the path fragment in the URL is no longer human-readable.

Discarded approach:
A hybrid solution of the previous two, because of the additional complexity and risk of overlooking another problem character.

Implementation:
A new PathEncoder class is added to the Helpers namespace and exposes Encode/Decode methods. The implementation uses .NET's Convert.To/FromBase64String methods plus substitutions for '+' and '/' (per the base 64 convention for URLs), and can be easily changed to another suitable encoding without requiring other changes (because the relevant scenarios all now go through PathEncoder). A corresponding set of unit tests for PathEncoder is added to the test project to verify encode/decode correctness and the absence of double-escape characters in the encoded text.

Routes for the Tree/Blob/Raw actions are updated to use "encodedPath" instead of "path", the corresponding controllers decode the encoded path before using it, and the corresponding links encode the path in their URLs.

changelog.md is updated accordingly.

Note: A similar change to encode the "name" route parameter should fix issue #54; I will look into that if this change gets accepted.
Follow-up of fix for issue #55: Change the path encoding to be human-readable for typical path names

The PathEncoder class is changed from using the "base 64 for URL" encoding to a custom implementation of the conventional "URL/percent encoding" scheme. Per the updated class comments:
/// Avoids triggering IIS's "HTTP Error 404.11 URL Double Escaped" exception
/// (http://support.microsoft.com/kb/942076) for paths with problem characters
/// like '+' by encoding/decoding path fragments in a manner similar to URL
/// encoding (http://en.wikipedia.org/wiki/Percent-encoding) except that '~'
/// is used as the escape character instead of '%' and ' ' is encoded instead
/// of being mapped to '+'. '~' was chosen as the escape character because it
/// avoids the double encoding problem of '%' and is the least commonly used
/// unreserved character in path fragments.

Characters in the RFC 3986 section 2.3 "Unreserved Characters" (http://tools.ietf.org/html/rfc3986) list (ALPHA / DIGIT / '-' / '.' / '_' / '~') are not changed by the new encoding scheme; all other characters are transformed. In particular, '/' and '\' are encoded, so it should be straightforward to fix issue #54 by an encoding of the "name" route parameter similar to how "path" is encoded. (I plan to do this in the next pull request.)

The new encoding means that for all typical cases the URLs for Tree/Blob/Raw controllers are unchanged from before the introduction of PathEncoder and are exact matches of the human-readable names for the corresponding repository files/paths (i.e., "file.txt"=>"file.txt").

The PathEncoderTest class is enhanced with 6 new tests (and 1 tweaked test) to verify the custom encoding implementation behaves correctly. These tests achieve 100% code coverage of the PathEncoder class.

changelog.md is tweaked to note that the fix applies to '&' as well as '+'.
Merge pull request #62 from DavidAnson/bug55feedback

Follow-up of fix for issue #55: Change the path encoding to be human-rea...
Fix for issue #54 where branches (and tags) with '/' in the name could not be viewed

Use the PathEncoder class (introduced to fix issue #55) to encode branch and tag names (in addition to repository paths) when used with the Tree/Blob/Raw/Commits controllers. All non-RFC 3986 unreserved characters in branch and tag names are encoded (in a manner similar to URL/percent encoding) and will not be mis-interpreted by IIS as URL components.

changelog.md is updated to describe the fix.

A few instances of trailing whitespace and two unnecessary @usings were removed.
Merge pull request #64 from DavidAnson/bug54

Fix for issue #54 where branches (and tags) with '/' in the name could n...
Add an allowSlash parameter to the PathEncoder.Encode method (default value: false) that allows callers to allow the '/' character to be passed through un-encoded. Add corresponding unit tests to verify the new functionality. Update URL creation for Tree/Blob/Raw to pass allowSlash=true so the {*encodedPath} portion of the route will look more like the directory structure of the repository (ex: "Blob/master/dir1/dir2/file").
Merge pull request #65 from DavidAnson/restoreslash

Add an allowSlash parameter to the PathEncoder.Encode method (default va...
Customize table/grid layout in Tree view for better display of long file names.

Prior to this change, long strings in the Name column would either overlap text in the Message column or else wrap within the column and overlap the following Name (depending on whether the Name included a break character like ' ' or '-'). This CSS-only change tweaks the table layout to give more room to the Name/Message columns, prevent wrapping of text in the Name column, and enable ellipsis ('…') for truncated text.
Switch RepositoryCommitModel to use Commit.Message instead of Commit.MessageShort so the complete text of the commit message will be available in the Commits and Commit views.

Note: Commit.Message includes embedded '\n' characters as-is; this change does not attempt to translate them to line-breaks (ex: via "<br/>").
Merge pull request #68 from DavidAnson/messageshort

Switch RepositoryCommitModel to use Commit.Message instead of Commit.Mes...
Merge pull request #67 from DavidAnson/ellipsis

Customize table/grid layout in Tree view for better display of long file...
Tweak a few English string resources for clarity, punctuation, and spelling.
Remove unused GitAccess_ProjectForbidden/Account_Edit_AccountInformation string resource from all languages.
Stream data in chunks
Remove buffering of response output
Merge branch 'master' into removebuffering
Merge pull request #71 from DavidAnson/stringpass

Tweak a few English string resources for clarity, punctuation, and spell...