Thursday, April 15, 2021

dotPeek: a Totally Free Alternative for .NET Reflector

As a professional .NET developer you recognize the value of a .NET decompiler. There are many scenarios when the original source code is not available but requires an understanding and using a decompiler is definitely one of the best ways to look at the source code. One of the advantages working with a managed framework like .NET is an ability for a decompiler to convert an assembly into an code of a high level programming language like C# instead of a machine code. And this is exactly an expertise in which the dotPeek shines.

Friday, April 9, 2021

Problems Migrating From SQL Server Management Studio (SSMS) v17 to v18

If you are an active multi-year user of Microsoft SQL Server Management Studio you are probably well-used to a controversial history of this product as an arguably one of the most loved and hated at the same time and one of the most outdated as well. Understandably, with so many different active versions of Microsoft SQL Server the requirements for this product are quite challenging but the users (us) continue to vote for this tool to exist and push Microsoft to keep updating it regardless of many other alternatives available on the market.

Wednesday, March 31, 2021

Reorder Columns in Spark DataFrame with Select() and Scala

Sometimes, when dealing with a Spark data frame it may be necessary to reorder columns in a certain order. For example, to keep data consistent when trying to union two or more data frames with the same schema but different order of columns. Let's explore how that can be done relatively easy using a select() Spark SQL function.

Thursday, March 18, 2021

Incorrect ReSharper Behavior for CS1591 Warning

After upgrading from Visual Studio 16.8.x to 16.9.x the JetBrains ReSharper suddenly started marking a lot of public identifiers in the code as compiler errors with a message: "Missing XML comment for publicly visible type or member...". You can imagine how that can be very annoying.

Wednesday, February 3, 2021

.NET Web API: Confusing 404 Response to OPTIONS Request for CORS pre-flight

Problem: when a Angular applications sends an OPTIONS request to its own backend to satisfy CORS preflight policy it unexpectedly receives a 404 response from a .NET Core Web API application that effectively blocks an actual data data request from executing correctly. If you have ever experienced this problem, continue reading to understand what the problem is and how to fix it. 

Saturday, December 26, 2020

C#/.NET: Validate Anonymous Objects During Unit Testing

Say, we have developed a REST API based on .NET Web API framework and need to write a unit test for an end point that returns a collection of objects. This sounds like a usual trivial task that many developers do all the time. Unless, the API method that we need to test, returns a collection of anonymous objects, that is the API method is written using a C# anonymous or dynamic type to construct objects that are included in the list.

It's totally fine when the endpoint is consumed over HTTP as the result is first serialized into JSON for transfer and then de-serialized back into a JavaScript object on a consumer side. If, however, the endpoint is called directly in C# without JSON conversion, like in a unit test, it's an entirely different story. Let's discuss how we can overcome this issue.

Friday, December 18, 2020

Angular: Mock NgRedux for Unit Testing

If you use Redux in your Angular web application (likely it is an NgRedux from Angular Redux) and develop unit tests for components that depend on the Redux store sometimes it's easier to mock the Redux store rather than deal with incorrect values that it may supply in a test scenario. If this sounds like your situation, read on.

Friday, November 27, 2020

.NET Core OData: How to Construct a DateTime Filter

Say, we need to construct a query to an OData endpoint that filters records by DateTime values. Over the years as OData standard had been evolving there have been various different ways to work with DateTime columns depending on OData version and an implementation of an actual OData service that could have been based on various different frameworks. This being said, it's likely, that a single universal way of constructing a DateTime based filter clause for OData services might not exist. Take this under consideration, and note that the solution presented below had only been tested with OData services that are built with .NET Web API Odata v4.

Friday, November 20, 2020

Reuse a MemoryStream without Writing to a FileStream

MemoryStream is a very useful class as it allows working with a Stream-like data in memory without having dependencies on any external resources like files, etc. Even though the MemoryStream implements an IDisposable interface it does not actually have any critical resources to dispose of, so, explicitly disposing of a MemoryStream object is not strictly necessary as the .NET memory management will take care of it. This specifics presents an opportunity of reusing the MemoryStream object if needed across multiple code scopes.