Wednesday, August 7, 2013

Visual Studio.NET metadata files and the function they serve when integrated with ClearCase

The following is a living list of information about the various metadata files associated with Visual Studio.NET and ClearCase.

Folder Hierarchy
The Visual Studio.NET (VS.NET) and ClearCase metadata exist in a simple hierarchy of folders. The first folder is the Solution folder and is named after the VS.NET Solution. The Solution folder contains one *.SLN file (see below), at least one *.SUO file (see below), and zero or more VS.NET Project folders. Project folders are named after their VS.NET Projects. The contents of the Project folders vary, but they always contain one *.CSPROJ file (see below) per Project folder, and a *.WEBINFO file (see below) if the Project is a web (ASP.NET) project.


SLN (Solution File)
The VS.NET Solution metadata is stored in the *.sln file. The Solution and all the Projects associated with it can be opened within VS.NET by opening the *.sln file. It is a text file and can be edited. It is version controlled.


CSPROJ (Project File)
The metadata file associated with individual projects is *.csproj. Within VS.NET, opening the *.csproj file will open that individual project. It is a text file and can be edited. It is version controlled.


SUO (Solution User Option File)
When ASP.NET Projects (generally termed as web projects) are created and version controlled, using VS.NET and ClearCase, VS.NET stores absolute paths of key artifacts (like Solution, Project, Web) and source code control information in the Solution User Options (.suo) file in addition to other files. A Solution user option file, is a binary file, which is specific to a given user, and is not version controlled.


.VSSSCC 
The .vssscc file is used by Visual Studio .NET to provide the source control integration of your projects.
They store project bindings, exclusion lists, original web names and more.
These files are required to be in the database along with their solution or project file.


WEBINFO (WEBINFO File)
When a web project (ASP.NET) is created, a *.webinfo file is also created in the same location as the *.CSPROJ. This WEBINFO file is also not version controlled by default. It must be manually added to source control if multiple views must be used with the web project. It is a text file and stores the URL pointing to the web projects *.CSPROJ file.


.CCEXCLUDE (ClearCase Exclusion File)
When using the ClearCase and VS .NET Integration, a file with the extension .ccexclude will be created if you choose the option "Exclude from Source Control" for a particular project file from within the Solution Explorer window. This file is simply a reference file that ClearCase uses to identify what files should not be included with specific source controlling operations, builds, etc. This option can be toggled at the preference of the developers by right-clicking a file and selecting ClearCase > "Include in Source Control" (or ClearCase > "Exclude from Source Control"). Note: The ClearCase Exclude from Source Control option should not be confused with the native Visual Studio .NET Exclude from Project option, information about which can be found in the Microsoft documented procedure

SQL OVER and PARTITION BY

OVER

OVER allows you to get aggregate information without using a GROUP BY. In other words, you can retrieve detail rows, and get aggregate data alongside it. For example, this query:
SELECT SUM(Cost) OVER () AS Cost
, OrderNum
FROM Orders
Will return something like this:
Cost  OrderNum
10.00 345
10.00 346
10.00 347
10.00 348
Quick translation:
  • SUM(cost) – get me the sum of the COST column
  • OVER – for the set of rows….
  • () – …that encompasses the entire result set.

OVER(PARTITION BY)

OVER, as used in our previous example, exposes the entire resultset to the aggregation…”Cost” was the sum of all [Cost]  in the resultset.  We can break up that resultset into partitions with the use of PARTITION BY:
SELECT SUM(Cost) OVER (PARTITION BY CustomerNo) AS Cost
, OrderNum
, CustomerNo

FROM Orders
My partition is by CustomerNo – each “window” of a single customer’s orders will be treated separately from each other “window”….I’ll get the sum of cost for Customer 1, and then the sum for Customer 2:
Cost  OrderNum   CustomerNo
 8.00 345        1
 8.00 346        1
 8.00 347        1
 2.00 348        2
The translation here is:
  • SUM(cost) – get me the sum of the COST column
  • OVER – for the set of rows….
  • (PARTITION BY CustomerNo) – …that have the same CustomerNo.