Bridge 1.10 Released

We continue work on the next major release of Bridge.NET (Bridge 2.0), but we haven’t forgotten Bridge 1. Support and improvements are being added regularly with another big push happening in the last few weeks.

Since the Bridge 1.9.0 release, we focused on fixing defects in Bridge 1 while moving all new major feature development into Bridge 2. We have seen a nice bump in the community involvement lately and with that new interest comes many more developers reviewing the work. All those eyes have uncovered some interesting scenarios that required fixing, so we’ve collected all those fixes into the next public release.

We’re happy to announce the release of Bridge 1.10!

During 1.10 development, eighty seven issues were solved, which represents 233 unique commits to the GitHub Bridge repo.

The last few months have seen us re-organize our internal processes to formalized on a Test Driven development approach. With the previous 1.9 release, Bridge included 3821 tests. For the 1.10 release we’ve added added another 1027 new unit tests! We now have a total of 4848 unit tests, all online at This great test coverage brings a high level of assurance and quality to the project, and our goal is to port all tests to Bridge 2.0.

Here are a just of few of the highlights from the 1.10 release:

  1. #385 – Full review of the String classes and implementation in JavaScript
  2. #588 – 500% performance boost in client side class initialization
  3. #387 – Huge code cleanup, formatting and normalization, also #488 and #490
  4. #494 – Issues with CombineScript, also #512
  5. #513 – New Shared Project support, also #562
  6. #502 – Issues with foreach loop, also #563

For the complete list of changes, please see the 1.10 milestone on GitHub, or the summaries further down in this post.

Joined the Contributor Covenant

We’re also proud to announce joining the Contributor Covenant!

Contributor Covenant

A new Code of Conduct document was added to the project root.

In the same spirit of the Contributor Covenant, we’ve also created a new up-for-grabs Label in the Issues. In general all the Issues could be considered up-for-grabs, but we’ve gone ahead and labeled a few issues to help highlight a possible easy entry point into contributing.

Feel like making your first contribution to an open-source project? If yes, grab one of those issues and send us a pull-request. Need a few tips on how to contribute a pull-request (a patch)? see our Contributing guidelines, or Get involved in Open Source today by Scott Hanselman.

New Features

#623 – Ability to get original (caller) scope for delegates
#562 – Support for Visual Studio shared projects
#554 – Implement String.Remove
#551 – Converting string enum
#531 – Support .csproj wildcard configurations
#516 – Join the Contributor Covenant community
#490 – Cleanup: 189 files in Bridge project have rogue tabspaces/whitespaces!
#461 – Generic HMTL5 Element and Event classes
#459 – [Document] Locale support configuration settings in bridge.json
#387 – Discontinue the usage of JSBuild on windows builds
#385 – Review String implementation
#381 – string.Join does not work as expected
#353 – [String] Implement IComparable, IEquatable
#347 – [Enum] Parse() and GetValues() are not implemented
#55 – Enhanced support for Enum

Breaking Changes

#602 – Rename GetUtcMonth to GetUTCMonth, because all other similar methods have uppercase “UTC”
#582 – Missing Members from C# DateTime API
#581 – Missed List.BinarySearch() method
#573 – Rename [Ignore] Attribute to [External] Attribute
#526 – Remove [Cast] Attribute feature
#495 – HTMLColor type change from Enum to String

Defects Fixed

#635 – Method [Name] attribute not respected when virtual method overridden in derived class
#634 – Foreach doesn’t work for HashSet
#615 – Extension methods selected incorrectly
#608 – Method overloading when one signature is an “override” from base class
#607 – Generic type that implements IEquatable-to-self results in stack overflow
#606 – Named arguments not supported in extension methods
#603 – Implicit operator ignored for null values
#602 – Rename GetUtcMonth to GetUTCMonth, because all other similar methods have uppercase “UTC” breaking-change
#599 – ReadyAttribute instance method being called with incorrect scope
#597 – Select(Func<TSource, int, TResult) implementation fails if instance member accessed
#595 – Method overloading does not work when one method is static
#592 – Problem with shift right(>>)
#588 – Problem with initialization of static members (Topological sorting implemented)
#587 – Compiler does not ignore emit of Members with extern modifier invalid
#586 – IgnoreAttribute|ExternalAttribute not ignoring Methods
#584 – Missed five Math.Round() overloads
#583 – Missed a couple of decimal.Round() overloads
#582 – Missing Members from C# DateTime API breaking-change
#581 – Missed List.BinarySearch() method breaking-change
#580 – Missed Array’s .CopyTo() Method with two additional overloads
#579 – Missed String’s .ToLower(CultureInfo) and .ToUpper(CultureInfo) overloads
#578 – Missed String’s .Split(params char[] separator) Method with overloads
#577 – $clone after function that returns a struct causes unsupported method
#572 – ‘get’ causes problem in Dictionary code
#566 – “this” reference incorrect in abstract base ctor when derived class has no ctor
#565 – Referring to some types defined in Bridge’s System namespace breaks generated code
#563 – Incorrect access to foreach variable in a closure
#559 – Base class constructors losing scope to other base class’ constructors
#558 – Polymorphism in inherited class generates incorrect js function call
#557 – Text node should alias ctor to createTextNode
#555 – C# String.Substring implementation conflicts with JavaScript String.substring
#550 – ArrayBufferView should be a superclass for TypedArrays or ArrayBufferView should be changed to interface that TypedArrays implement or something else
#549 – TypedArray.Prototype should not be in C# and in emitted JavaScript
#548 – TypeArrays miss the [Name(“TypedArray”)] attribute
#546 – JavaScript Template error with DateTime .AddMinutes()
#544 – JSON.Parse not working correctly on primitive C# types
#542 – Greedy inline code comment regex pattern
#538 – Error with character selection by index on a string
#537 – Order of Partial Class or Interface definition affecting emit sequence
#534 – Const expressions incorrectly emitted into the init function
#532 – List.GetRange logic error
#528 – ModuleDependency attribute is being ignored
#527 – Module name sometimes not included in dependencies
#524 – [Name] attribute being ignored on indexer property
#522 – Derived classes share parents member variable lists
#520 – Func<Source, EventHandler> generates incorrect JS?
#518 – Error loading Bridge with require.js
#514 – System.Math.Sign(double) method overload missing
#508 – Two async for loops in one method with one indexer name generates invalid js name
#507 – Awaiter in iterator block of for loop generates wrong state machine js code
#506 – Task.WhenAny and Task.WhenAll incorrectly handles IEnumerable argument except array
#505 – Task.FromResult uses incorrect variable name
#503 – List AddRange issue
#502 – Only 3 foreach() statements allowed in a method
#501 – List serialization and internal member definitions
#499 – Remove System and System.Version from global namespace
#498 – Invalid JS output by date code (missing parens)
#497 – Culture-specific TryParse does not behave as expected
#495 – HTMLColor fields should accept string too breaking-change
#488 – CRLF line endings being added to bridge.js generated by the build.bat script in some git clients
#479 – System.Collections.Generic.KeyValuePair implementation does not have a constructor
#165 – Require === Type Equality check in Core.js