Tuesday, August 2, 2016

Stakeholder licenses for Team Foundation Server and Visual Studio Online

Since Stakeholder licenses are FREE for Team Foundation Server/Visual Studio Online users, naturally, many companies/organizations want to understand what features/functionality is provided with this FREE license.

You can find a basic overview of operations the Stakeholder license is allowed to do here: https://www.visualstudio.com/en-us/news/2014-aug-27-vso.aspx

For more detailed information on the exact features and functionality provided to the Stakeholder license, you can check out this handy article provided by Microsoft: https://www.visualstudio.com/en-us/docs/work/connect/work-as-a-stakeholder

Once you read the above article, you will notice that Stakeholder licenses are basically restricted to managing Work Items on a very basic level.  Working in Team Rooms or even doing simple operations such as dragging and dropping Work Items from 1 state to another on the Kanban board are restricted!

Of course, tools such as Trello (https://trello.com/) and KanbanFlow (https://kanbanflow.com/) do not restrict their users from such operations, so it does make much sense why Microsoft would restrict this capability in Visual Studio Online/Visual Studio Team Services.

If you want Microsoft to include drag and drop on the Kanban Board for users with a Stakeholder license, you can vote for this UserVoice item here: https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/12797556-allow-stakeholders-to-drag-and-drop-work-items




Visual Studio Online pricing explained

I was recently investigating Visual Studio Online/Visual Studio Team Services pricing and started reviewing this page: https://www.visualstudio.com/en-us/products/visual-studio-team-services-pricing-vs.aspx

The pricing listed on the screen, however, seemed to be rather confusing in terms of purchasing user licenses.

Initially, you are given a pack of 5 free users, so when you buy 10 users, does that mean you lose the initial 5 free users?

Well, as it turns out, yes, you are ONLY receiving 10 BASIC user licenses!!

Therefore, you will end up with a total of 10 users (including the initial 5 free users)!!

All of these user licenses are Basic user licenses which provides most of the functionality within Visual Studio Online/Visual Studio Team Services.

Of course, these licenses exclude any users which own an MSDN subscriber account as well as any Stakeholder licenses which continue to remain FREE!

This becomes SIGNIFICANTLY more expensive once you move up to 20 users ($110/month)!!  By comparison, licensing a source control system such as BitBucket (https://bitbucket.org/product/pricing) only costs $100/month for 100 users!!

However, Visual Studio Team Services offers significantly more integrated functionality than a tool such as BitBucket, so this should also factor into the decision making process before choosing Visual Studio Online as your source control tool of choice!


Customizing ASP.NET Web API Help

If you are working with ASP.NET Web API Help, chances are that you will want to customize the output of Web API Help even after enabling Xml Comments.

Unfortunately, there are not a lot of articles published out there which shows you the ins and outs of customizing ASP.NET Web API Help, but there are a few!

Here are a few articles that go through how to make some basic customizations to ASP.NET Web API Help:

https://blogs.msdn.microsoft.com/yaohuang1/2012/09/30/asp-net-web-api-help-page-part-1-basic-help-page-customizations/

https://blogs.msdn.microsoft.com/yaohuang1/2012/10/13/asp-net-web-api-help-page-part-2-providing-custom-samples-on-the-help-page/

https://blogs.msdn.microsoft.com/yaohuang1/2012/12/10/asp-net-web-api-help-page-part-3-advanced-help-page-customizations/

ResponseType attribute in ASP.NET Web API

I was recently introduced to the ResponseType attribute for documenting my ASP.NET Web API Web Applications.  This was a feature that I was not aware of previously and after discovering it, found rather handy!

If you read the MSDN documentation for this attribute, you will see that it is used to describe the Web API for Web API Help: https://msdn.microsoft.com/en-us/library/system.web.http.description.responsetypeattribute(v=vs.118).aspx

This article addresses the ResponseType attribute as well as other Data Annotations much more clearly: http://www.strathweb.com/2014/01/return-types-action-parameters-and-data-annotations-now-available-in-web-api-2-1-help-page/

Therefore, you can use all of these attributes to more clearly your Web API Urls!

Monday, August 1, 2016

Why I still use SourceTree or GitKraken when developing with Git in Visual Studio

I have been using Git with Visual Studio regularly for the past several months and the deficiencies in Visual Studio integration with Git never cease to amaze me!

Below are just some of the errors/problems that I have faced while working with Visual Studio and
Git:








These error messages completely prevented me from performing any operations against Git.  Of course, I then switch over to an alternate Git GUI Client such as SourceTree or GitKraken and attempt to perform the same Commit operation and it works just fine!

In addition, Visual Studio integration with Git still lacks a very large number of Git commands such as Discard and various other commands which makes using an alternative Git client such as GitKraken or SourceTree an absolute necessity!!


Using Ninject Extensions Conventions

If you are using Ninject, you may find yourself duplicating a lot of code for binding interfaces to their respective classes.

Fortunately, Ninject has a NuGet package which can take a lot of that tedious work away and bind interfaces to classes automatically!

The name of the Ninject package is called Ninject.Extensions.Conventions:



Once you have installed the NuGet package, you can add the following code to the RegisterServices method of your NinjectWebCommon.cs file:


That is all that is needed to get your Ninject project up and running!

Using Ninject with Generic Types

I have been using Ninject for years to bind Interfaces to Classes, or even Classes to instances of Classes, but I had never earlier bound a generic Interface to a generic Class!  In my case, I was creating a Generic Repository class and needed to bind it using Ninject.

After doing some searching through StackOverflow discussions, I came across this solution which worked well:



As you can tell from the above code sample, the only main difference in the code base is to use the typeof casting operator to get the generic type to resolve correctly!