Visual Studio

SSDT 2017 and Backwards Compatibility

If you are working with SSDT 2017 and creating reports for earlier versions of SSRS, please read the following article!

I really think MS did a great job here with the “TargetServerVersion” property functionality, which allows reports to convert to previous SSRS formats during deployment.


JMESPATH and Visual Studio Code

The default format in which AWS CLI data is returned is JSON.  The JSON data that is returned can be queried with the query language JMESPath.

For example, using the AWS CLI, I can list the details of the volumes associated with my CLI profile.  (aws ec2 describe-volumes)

Example output:

    “Volumes”: [{
        “AvailabilityZone”: “myZone”,
        “VolumeType”: “standard”,
        “VolumeId”: “myVolumeID1”,
        “State”: “in-use”,
        “SnapshotId”: “mySnapID”,
        “CreateTime”: “2017-01-02T00:55:03.000Z”,
        “Size”: 1
        “AvailabilityZone”: “myZone”,
        “VolumeType”: “standard”,
        “VolumeId”: “myVolumeID2”,
        “State”: “in-use”,
        “SnapshotId”: “mySnapID”,
        “CreateTime”: “2016-01-02T00:55:03.000Z”,
        “Size”: 1

Now, lets say there are many more volumes returned from this CLI command and from that output I want to find the volume(s) that were created before a specific date. (January 01, 2017)

I can utilize the query option on the AWS CLI command to return specifics from the JSON results.  (aws ec2 describe-volumes –query ‘Volumes[?CreateTime<`2017-01-01`].VolumeId’)

However, sometimes getting the JMESPath syntax correct is not always easily.  The extra tools that I utilize to help me are Visual Studio Code with the JMESPath plugin.


So with this VSCode plugin, you can quickly validate your JMESPath syntax if you need.  One note when using the “–query” option on the CLI is that the processing is happening on the Client machine, unlike the “–filter” option that happens on the server.


MSBuild Task – Execution Time

Looking to find out how long it tasks to execute a MSBuild task?  Below is a quick method that I recently used to accomplish this.  (Based on this blog)

  1. Before the task, you will need to set a property that is equal to the current UTC ticks.
  2. After the task, you will again need to set a property that is equal to the current UTC ticks.
  3. Now you will need to subtract #1 from #2, which will give you the number of ticks that task executed for.
  4. Convert the number of ticks to a friendly time value

Note – There are ten million ticks in a second

<Project xmlns="" DefaultTargets="Init">
 <Target Name="Init">
   <!-- Set start property -->

   <!-- Command to simulate sleeping for 4 seconds -->
   <Exec Command="ping -n 5 -w 1000 >NUL"/>

   <!-- Set the finish time, calculate overall time, and then output in freiendly format -->
     <ExecutionTicks>$([MSBuild]::Subtract($(FinishUTCTicks), $(StartUTCTicks)))</ExecutionTicks>

  <Message Text="Init Task Total Time: $(FriendlyTime)"/>

Below a the results with the execution time displayed in the standard format.


Visual C++ Redistributable and Missing MSVCR100.dll

So you have encountered an error similar to the following when running a new program on a Windows computer.

  • The Program can’t start because MSVCR100.dll is missing from your computer

You will typically get this error when the program you are running was built with some version of Visual Studio C++ (VC), and that VC run-time version and its components are missing from your computer.

To view the current Visual C++ run-time components (Visual C++ Redistributable) installed on your computer, just view your installed programs from the control panel.  You should see something like the image below.  These different versions can run side-by-side without issue, so don’t be alarmed if your list looks similar to mine.


If you are unsure of what version you need, you can download a tool like Dependency Walker and use it to view all dependent modules of your .exe file.  In the example image below, the VC run-time version your program requires will be VC12, which is the 2013 version of the Redistributable package.


Quick reminder of how the .dll names map to the versions of Microsoft Visual C++ Redistributable.

Visual Explanation of Future Updates – In the installed program image above you will see both 2015 x64 and x86 installs of the Redistributable.  Now look what happens after the 2017 x64 install, the 2015 x64 entry was removed. (In place upgrade)


Visual Studio Version Numbers

The Visual Studio version numbers and product naming convention has always been a little confusing to me.

Example: I have Visual Studio 2015 installed on my PC and the installation folder path is “C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe”.

The table below shows the Product Name and corresponding Version number.

  • Visual Studio 2008 (V9.0)
  • Visual Studio 2010 (V10.0)
  • Visual Studio 2012 (V11.0)
  • Visual Studio 2013 (V12.0)
  • Visual Studio 2015 (V14.0)
  • Visual Studio 2017 (V15.0)

There must be a good reason why they didn’t align the Name and Version…..

Interesting VS 2017 Installation Notes:

  • VS 2017 installation path is “C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe”
  • You can opt to install VS 2017 in a different location and drive, but note that most files will still be installed on the C:\ drive.
    • “About 75% of the files get installed to System folder by design. The other 25% gets installed to custom install path” (Source)