Wednesday, March 2, 2022

User Interface Automation Framework

The Microsoft UI Automation APIs enable navigation of user interfaces programmatically.
Some of the areas of application are UI Automation testing,  manufacturing Quality checks, Accessibility,

The UIAFramework  is a light weight framework that can be used to achieve UI Automation.either by Scripting languages or C#. It has two components ControlDBTool and UIADriver. The UIAFramework is based on .net CLR 3.5 and works with Windows XP and above. The process involves two steps.
  1. Identify controls participating in UI automation in an user interface and generate a control database using ControlDBTool.
  2. Using the UIADriver component, manipulate the control by invoking a method  or property from the supported control patterns of the control. For e.g., Invoke method of Button control.
ControlDBTool
ControlDBTool is a GUI based tool that aids identification of UI elements that participates in UI automation. The users can basically select UI elements from an application and save them into a file based repository. ControlDBTool also supports record and play feature where code can be generated from user actions.


UIADriver
UIADriver is an easy to use managed class library that provides an interface to simulate user interactions on various UI elements such as Buttons, Grids, combo boxes etc. This is exposed to script based and unmanaged clients via COM.
UIADriver supports both UIA (user interface automation) and MSAA (Microsoft Accessibility Api) technologies. These basically provide the foundation for UI automation and are part of the OS. UIA is the successor of MSAA and can be used for both WPF and Win32/Winform based UI controls.  However, it exhibits anomalies with certain winform based controls. In such cases, MSAA can be used to fill the gap.
The code generator of the ControlDBTool discussed earlier uses the UIADriver library to perform UI operations.




Example
In this example, calucalator.exe is launched and  multiplication calculations are performed as discussed below.

1. Launch calucalator 
2. Launch ControlDBtool and set toolbar only mode

.

3. Click on record button and perform following actions on the calculator using mouse
4. click digits 8 7 8 4 x 1 6 x 1 0 4 0 as shown in the below

5. stop recording the controldb tool 
6. save the recording
7. recorded actions are listed as below. if there is any unmapped event, it needs to be mapped to the action.


8. set  controldb tool to regular mode
9. save the recording
10. click on generate code and save the selection
11. select all the actions
12. select C# code from the dropdown

13. Save the code to calc.cs
14. edit calc.cs file and add highlighted code in main() and save.
	   
public static void Main()
{
	string brs = null;
	System.Diagnostics.Process.Start("calc.exe");
	System.Threading.Thread.Sleep(2000);

	UIAAutomationElement.UIADriver.SetAutomationElement (objsample.button_Clear_clearButton_1294_432);15. open a command window from the saved location
16. compile the code to generate exe using following command


17. execute runcalc.exe. the playback looks as in the video below

Source and Binaries can be found here.

Friday, February 25, 2022

File Splitter and Merger Tool for Transmission



What's File Splitter and Merger Tool?
It's an command line utility to truncate a big file into small pieces, later to be assembled.
Useful for sending big attachment files in mails, copying a big file into floppies etc.



How does it work?
During Disassemble, input for the source file, destination folder and truncation size are accepted. Later the file is split into multiple files with the name filrname.nn where n is the file number in the destination folder.  e.g., Test.data.00,  Test.data.01 etc

During Assemble, input for the destination file that will be assembled, source folder that contains truncated files are  accepted. Later the destination file that will be assembled back from the multiple  truncated files from source folder .

How to use it?
let's say if we want to break a big file d:\data\data.mdb of 10MB into eleven(11) 950K files:
open a Command window and type the command below.

FileSplitterMerger D d:\data\data.mdb  950000
you can see that 11 files d:\data\data.mdb.00 ..... d:\data\data.mdb.10  are created.

To assemble back, open a Command window and type 
FileSplitterMerger A  d:\data\data.mdb  
you can see the d:\data\data.mdb created after the merge


Source and Binaries can be found here.


Thursday, February 17, 2022

Script to Zip and Unzip Files using Window shell



Often times applications require files to be zipped to a .zip file and extract files from the same. makezip_unzip.vbs  uses Windows shell do this easily.



Create Zip File Example

  1. Arrange all folders, sub folders and files matching zip file structure inside a "stage" folder. Example, d:\temp\reports
  2. Execute  in command window
           makezip_unzip.vbs   "d:\temp\reports"   "d:\reports.zip"

if not exist, d:\reports.zip will be created.

Extract from Zip file Example

Execute in command window
           makezip_unzip.vbs    "d:\reports.zip"   "d:\temp\reports"
If not exist, d:\temp\reports folder will be created to receive files from the .zip file. 
Note that full path must be supplied to the arguments.



Source and Binaries can be found here.


Friday, February 4, 2022

Innovative File organizer with Duplicates finder and Hierarchical viewer


No matter how big the hard drive's capacity gets, the prevalent issue of lack of storage remains.
When there is an urgent need to free up space, getting a fair idea of  the storage distribution becomes paramount.
FileOrganiser tool attempts to fill the gap by providing a hierarchical  view of the storage distribution along with options to sort data in multiple ways.

File organizer with Duplicate file finder has following features.

Folder View
Lists folders and files in a single screen hierarchal order along with their disk sizes and file count.
  • The files can be viewed hierarchically  and can be sorted by File count, File Size and File Names.
  • The file size can be viewed in different disk size units such as KB, MB and GB
  • Selected Files can be deleted or path can be exported to file or copied to another folder.
  • Files can be selected individually or entire folder can be selected using toggle selection
  • Width of file display can be changed
Duplicates View
Multiple copies of the same file such as pictures gets spread across the disk. It also becomes important to keep track from security Point of View.
The user interface is same as compare folder view discussed below except duplicates are searched in the same folder.

Compare Folders View
Compares two different folders and lists duplicate files in hierarchical order  along with individual files.

Duplicate Hierarchical View

Duplicate Flat View

Non Duplicate Hierarchical view
  • The duplicates files can be viewed hierarchically  or flat and can be sorted by File count, File Size and File Names.
  • The file size can be viewed in different disk size units such as KB, MB and GB
  • Selected Files can be deleted or path can be exported to file or copied to another folder.
  • Files can be selected individually or entire folder can be selected using toggle selection
  • Width of file display can be changed
Export
Exports files along with their unique MD2 values. Useful for large directories where faster processing can be done using SQL based queries.
Individual entries are separated by |


Source and Binaries can be found here.



Sunday, January 30, 2022

A Backup, Restore, and Update Tool with a refined approach



Let's face it, over the period number of files grow, change, removed, copied and moved etc. Keeping track of these will be a challenge unless they are backed up and tracked to restore when needed.

The Backup and Restore Tool discussed here has following features:

  • Create Backup collections and add / remove folders that will be backed up.
  • Add exclude folder list such as system folders. e.g., c:\window
  • Track files by CRC so that only a single copy of that file is stored.
  • Files are backed up to a password protected archive.
  • Each archive's metadata is also password protected.
  • During backup, an integrated view is presented where each folder is indicated as archived and partial , modified or changed.
  • During backup, an integrated view is presented where each file is indicated as archived and modified 
  • During restore, an integrated view is presented where each folder is indicated as same, deleted and changed 
  • During restore, an integrated view is presented where each file is indicated as same, deleted and changed 

Main
The following diagram illustrates the backup and Restore tool.

New
Creates new archive. The GUI is shown below.


Operation
  1. Enter a name for the archive. e.g., TechBlog
  2. select a location  for the archive. A new folder will be created under this folder to store contents of the archive. c:\archive\TechBlog.
  3. Enter a description for the archive
  4. Select folders to backup. e.g., d:\techblog. The checkbox of the folder to be backed up should be checked to take the backup.
  5. Folders that needs to be excluded from backup such as system folder can be specified in exclude.txt under the collection folder.
  6. After Clicking OK, user is asked to enter a password for the archive. This password is used for storing metadata of the archive.


Edit
Once the archive is created, edit can be used to add additional folders to backup or select deselect folders for taking backup.



Backup Tool

A collection is a set of folders that needs to be archived in multiple backups. Each backup contains a snapshot of the archived folders at the time backup was taken. 



Operation
  1. First select folders to backup as discussed above and Click Backup button
  2. An integrated view is presented to select files/folders and status of the file and folder items. 
The status of a file item can be as below.
  • New - New file. Never backed up.
  • Changed - Existing file changed after last backup. 
  • Archived - Existing file that didn't change since last backup.
Similarly the status of a folder item can be as below.
  • New New Folder. Never backed up.
  • Partial Existing folder structure changed since last backup. 
  • Archived  No changes since last backup

3. Finally, Check the checkboxes to choose the files that needs to be backed up. Click Backup Now button to start taking backups. The backups will be saved into a internally generated password protected 7zip file. 

 Restore Tool

The restore tool can be used to restore files from previously archived backup.

Operation
Select a backup from the dropdown list to restore.
Files are synched with disk if "sync with folders" is checked. This will compare the crc of the existing files with the previous backups and determine which files needed to be restored. 
Each file can have three states -  Same, Changed or Deleted.
  • Same means the file has not changed hence no restoration is needed.
  • Changed means the file has changed hence restoration is needed
  • Deleted means the file is deleted  hence restoration is needed
In the same way, A folder can have one of the three states -  Same, Changed or Deleted.
  • Same means the folder has not changed.
  • Changed means one or more files in the folder has changed hence restoration is needed.
  • Deleted means the entire folder is deleted  hence restoration is needed.

By default all the files from the previous backups are listed. If  changes only is checked, only files from the selected backup are listed.

If Hide Same is checked, all the unchanged items are removed from the display.

Export exports file  items listed to a csv file along with the crc.

Refresh Resyncs with disk for latest changes.

Finally, Check the checkboxes to choose the files that needs to be restored. Click Restore button to restore. As shown below, the files can be saved to a different folder or to the same original folder where they existed.



 Update Tool

It's a hybrid of Backup Tool and Restore Tool. The Update tool can be used to update previously archived backup. Folders and Files can be added and removed from the archive without having to use Backup Tool. This is helpful incase the original backup is not available.


Operation
Select a backup
Expand the tree and select the folder that receives files
Drag and drop files. after acknowledgement  files will be added automatically.




Source and Binaries can be found here.


Thursday, January 20, 2022

Desktop Virtualization of Released Software using Virtual Hard Disk

Software Applications in regulated domains  use customized  OS based  on an embedded OS such as WES7 or Win10 IOT. This is for restricting access and  also to provide a highly controlled environment.

The application software installation can be time consuming as it involves first formatting and installing the OS; then installing application software. With multiple releases of the software and limited resources, installation of an older release can be painful especially if it's DVD based due to wear and tear.

A Virtual Hard Disk or  VHD is nothing but a flat file  on the disk of host PC, which can be mounted as a Hard disk on the system with multiple partitions. Further a VHD can be made bootable by adding an entry to the boot menu. A VHD can be created using DiskMgmt control panel app or using diskpart.exe.


A VHD can come very handy where OS + Application can be pre-installed on a VHD. It simply can be mounted and made bootable on demand. In other words, a single PC can run multiple installations on demand without requiring an installation. The file can be even copied and deployed on a different but compatible PC.

Example
Consider a typical software application that runs on a customized embedded OS. The volume layout can be as below.
C:  OS + Application Software
D:  Data
 
Create a VHD
A VHD can be created using DiskMgmt control panel app or diskpart.exe. The example below creates a VHD with a matching volume layout as shown above.
After running the script, the VHD can be visualized as shown above  diskmgmt.msc

Load  OS into VHD
The next step is to format the active partition on the VHD and load OS into it using imagex command
Note that H: is the system partition as shown above.  This usually loads syspreped image of the OS
imagex /apply Installer.wim 1 H:

Make VHD bootable and make it default
bcdboot h:\windows
Boot files successfully created.
bcdedit /set {default} description "Some App 1.0"
The operation completed successfully.

Reboot
After reboot a new boot menu entry is added as shown below and is automatically selected to boot from.

Load Application Software
Once OS is installed, the Application software will be loaded as a part of the installation.


Source and Binaries can be found here.


Sunday, January 9, 2022

Using bootable Virtual Hard Drive as Media instead of USB Drive/DVD Disk

Installing commercial software having embedded OS  such as WES7 or Win10IOT, uses various types of media such as CD/DVD or USB. This is mainly because of deployment of custom Operating system. These type of installations cannot be automated because of  need of manual operations such as boot options, bios password etc.
A bootable Virtual Hard Disk( VHD) provides a perfect solution. Following describes the process in detail.
1. Duplicate the USB disk image into a Virtual Hard disk. For example, The VHD contains two partitions. The first is bootable partition containing WinPE OS. The second is Service Disk containing license files.
2. Load the OS
The OS Image in an USB has following structure:
The sources folder contains the boot.wim which is loaded by the OS. However for the VHD, the entire boot.wim should be extracted into the bootable drive.
In addition, customization of the scripting may be required for correct deployment. It can be done starting with modifying windows\system32\startnet.cmd file. This script is first that is executed.

3.Adding boot entry and make it default.
The last step is to add an boot entry to the VHD file. After adding the entry system is rebooted. The system loads bootable VHD drive and loads the WinPE OS the same way in case of an USB drive.
bcdboot u:\windows
Boot files successfully created.
bcdedit /set {default} description "Some App 1.0"
The operation completed successfully.

4.Reboot the system
After the system restarts, the system will automatically select the bootable vhd to start.


Source and Binaries can be found here.


Friday, December 24, 2021

Truly Portable Patch Tool and file comparer



In the diversified development environment of today, multiple code repositories are used by cross development teams. As each have an indigenous way to deal with patches, a generic method of creating and applying patches is much desired along with recursive folder comparison and viewing the file differences and other operations. The portable patch tool attempts to address these.
Portable patch tool has following features.
Create Patch
  1. Create patches between two folders
  2. Filter out special folders and files
  3. Include additional files
  4. Create patches from a file list
  5. Include source files in the patch
  6. Work with any file type – text or binary
Apply Patch
  1. Preview changed files hierarchically before applying the patch
  2. Apply changed files in patch selectively
  3. Files that are changed are flagged

Compare Folders
  1. Recursively compare folders such that files are flagged as unique left or right and different
  2. Options to view files and sort based on directory name, extension etc
  3. Options to delete and copy files
  4. Export file list
  5. Options to  view only left , right or diff files
  6. Options to filter files including  and excluding patterns
  7. Export/Import/Extract    
Export/Import/Extract
Export patch files to a .ZIP file
Import patch files from zip file
Extract contents of a patch file

Create patch
A Patch contains differences between two folders. It can also contain additional files.


“Source Folder” contains the code downloaded from the source repository.
“Updated folder” contains developer changes that needs to be reviewed
“Patch Archive” is a temporary folder hosting the patches

Options
The “Options” dialog gives additional options as discussed below:


Typically source control repositories use a hidden folder or file name such as .svn or .copyareadb or .git etc. These need not be included in a patch. Users can specify all such file extensions or folder names separated by a semicolon in “Exclude All”.
As mentioned earlier, the patch contains only files that are different. Additional files from “updated folder” can be added to or removed from patch using + or – buttons. The list of additional files are stored as additional_input.txt in the patch folder. In addition, a list of files can be inputted via text file using … button. This file can be exported in “Compare Folders” tab discussed below.
Typically the patch contains the files from “Updated Folder”. The “Include Source” option enables including corresponding files from “Source Folder” as well.
By default, every file that differs is included in the patch. Instead users can also provide a list of files to be included in a patch in the “Import File List”. Again this file can be exported in “Compare Folders” tab discussed below.
The differences of the files can be viewed by specifying the application in “File difference viewer”. The Arguments <File 1> and <File 2> must be specified along with others if any. They are replaced by actual file names when passed as command line arguments to the application.
Finally a patch is created by clicking the “Create” button. A patch consist of three files – patch_meta.csv containing the metdata of the files in the patch. Patch_data.dat containing the raw patch files and Patch_source.dat containing the files from the |source folder” 

Apply patch
Patches created in “Patch Archive” folder can be applied to the contents of the “Target Folder”.
Before applying the patch, changes can be previewed by clicking “Preview” button. This brings up GUI as shown below:

Preview
Patches are applied by clicking “Apply” button. This brings up GUI as shown below.Files are displayed hierarchically.  



























The "Diff” branch contains files that are different. “New” contains files that are new.
If “Winmerge” is installed, changes of any file under “Diff” can be viewed by double clicking on it.  Typing “Ctrl+C” copies the file name to clapboard.
Clicking on any file under “New” loads it in “Notepad”.
Users can filter a specific file extension in “Filter Extensions”. Multiple file extensions can be separated by a semicolon.  All possible file extensions available in the file set are also listed,
+ / _ closes or expand tree.
“Merged View” combines “Diff” and “New” branches to present a unified view.

Apply


























This displays a flattened view of the files “AutoMerge” column indicates weather Patch needs to be manually merged or not. True – means no and false means yes. In this case file can be manually merged using tool such as Winmerge.
The “Remark” column has three values – “Diff” files are different. “Same” files are same. “New” the file is new.
The files can be sorted by clicking on any column header. This is listed in “Sort Columns”. The sorting can be cleared by clicking “Clear” button.
“Select All” selects all files.

Filter

If the file set is huge, filtering of the files can be done by clicking the “Filter” button which brings up following GUI.
“Exclude All” option excludes all file containing the file pattern. And “Include Only” includes only files containing the file pattern.
Predefined patterns “Reset” removes any filtering. “Diff”  ,“New” and “Same”  shows files as in the “Remark” column discussed above.

Finally files can be marked for applying. If the file list is huge, files can be selected based on the filtering. It’s possible that a certain filtering may not show previously selected files. In such cases “Show selected” options lists only the selected files overriding filtering.

“Apply Patch” button applies the patches. If “automerge” for a file is True, then the file in the “Target Folder” is overwritten. If the “Remark” is New, the file is copied into the “Target Folder”.

If the “automerge” is False and Remark is Diff, a new file is created appending “_new” to the file name. Sometimes this is undesirable so in such cases, those files must be manually merged and selected out from patching. In other words, patching should be done to “automerge”  True or New files only.

Compare Folders
Two folders can be compared for differences in “Compare Folders”.
The “Left” and “Right” point to two folders with similar file structure. After comparison, a file can be categorized as “Diff” - file that exists in both folders but different, “Left” file only in Left folder. “Right” only in right folder.
Options
The “Options” dialog gives additional options as discussed below:


Typically source control repositories use a hidden folder or file name such as .svn or .copyareadb  or .git etc. These need not be included.
Users can specify all such file extensions or folder names separated by a semicolon in “Exclude All”.
The results of comparison are as shown below.

The “Remark” column has three values – “Diff” files are different. “Left” unique files. “Right” unique files. 
The files can be sorted by clicking on any column header. This is listed in “Sort Columns”. The sorting can be cleared by clicking “Clear” button.
“Select All” selects all files.

Filter

If the file set is huge, filtering of the files can be done by clicking the “Filter” button which brings up following GUI.
“Exclude All” option excludes all file containing the file pattern. And “Include Only” includes only files containing the file pattern.
Predefined patterns “Reset” removes any filtering. “Diff”, “Left” and “Right” files as in the “Remark” column discussed above.
Before applying the patch, changes can be previewed by clicking “Preview” button. This brings up GUI as shown below:

Preview

If the file list is huge, files can be selected based on the filtering. It’s possible that a certain filtering may not show previously selected files. In such cases “Show selected” options lists only the selected files overriding filtering.

The selected files can be exported using “Export” option to a txt file. This file can be later used to specify an additional file or input file during patch creation discussed earlier.

The “Delete” option deletes selected files.

The “Copy Left” option copies the selected files to the “Right Folder”. Similarly “Copy Right” option copies the selected files to the “Left Folder”.

The read only attribute of file can be also removed before delete or copy operation.

Export / Import / Extract

As a Patch contain multiple files, it  can be exported to a .zip file which can be imported.

 

“Patch archive” indicates folder that is used for export or import.
Export
Brings up a Save as dialog to select the name of the zip file to save the contents of the patch.
Import
Brings up a Select Files dialog to select the name of the zip file and extract its contents to the patch archive folder.
Extract
The contents of patch can be extracted using “Extract” option, The differences are written to “left” folder the archive and if the source files are included in the patch, they are written to “right folder also.

Examples
The following discusses some of the examples.

Deploy Patches
  1. At the source the patch can be created as discussed in “Create Patch”
  2. The patch can be exported as discussed in “Export/Import/Extract”
  3. At the destination the patch can be imported as discussed in “Export/Import/Extract”
  4. The patch can be applied as discussed in “Apply Patch”.
Code Review
  1. At the source the patch can be created as discussed in “Create Patch”
  2. The patch can be exported as discussed in “Export/Import/Extract”
  3. At the destination the patch can be imported and extracted as discussed in “Export/Import/Extract”
  4. The reviewer views the changes and even adds review comments
  5. Creates a patch and exports the patch back to the sender
Code Rebase
During development of a feature, changes are not checked in to the repository  for some time while the repository gets updated by others developers. In such cases the feature developer can stay updated as below.
  1. Download latest code to repository workspace
  2. Compare it with developer workspace as discussed in “Compare Folder”
  3. Manually merge changes if necessary else overwrite.
  4. Add in coming files and remove deleted files at source

Source and Binaries can be found here.



Monday, December 20, 2021

Visual Studio Migration Tool


During a project's life cycle, moving the code base to the next version of visual studio becomes necessary to take advantage of newer features, This can be daunting task if there are a large number of projects.
The "Migration Helper" utility makes it a breeze as described below.
  • Updates project settings ((PlatfromToolSet and Framework version) ) and solution settings (Visual studio version) to a newer version of visual studio 
  • Generates a report containing settings of all the projects and solutions to analyze the results of migration. 
  • Generates a report describing the CLR and Version of all the DLLs generated after successful build. 
  • Generates a report analyzing each managed executable 's references to detect potential "mixed mode" situations.
The Migration Helper tool is divided into three tabs as shown below
The "Source Folder" specifies the root of the project folder. All the actions recursively  scans directories looking for projects and solutions. The "Output Folder" houses  reports generated.

List Tab
List
This recursively scans  for projects and solutions listing the project and solution settings as shown below.













Runtimes
This action should be invoked after the  build,, This recursively scans  through  all the DLLs and lists the DLL version and CLR version (if managed) as shown below. The  "ildasmpath" setting of of MigrationHelper.exe.config should point to the ildasm.exe. Similarly "dumpbinpath" should point to dumpbin.exe.


Dependencies
During migration, when some of the managed executables move to a newer CLR (> 4.xxx),, they might still reference assemblies from an older CLR (< 4.xxx). This leads to "Mixed mode" and the exe's app.config should address this.
Identifying such executables can be daunting as the references must be recursively scanned for dependencies. This is made simple by Dependencies option. This scans through all the executables and their references recursively and tries to load. Any errors related to "Mixed mode" are captured and reported as shown below. A detailed map of the Executables and their references is also generated,.

D:\xxx\yyyyy.vcxproj,exe
Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

VS Upgrade Tab
The Visual Studio provides an option to upgrade projects and solutions by invoking devenv.exe with upgrade option. The path to the devenv.exe pointed by "devenvpath" setting of MigrationHelper.exe.config. Be warned that migration may not succeed in some cases. 
Run
Based on the selection - solutions or projects, the source folder is scanned recursively for .slns or .*Proj files.  Upgrade is attempted for selected files and reports are generated  If the migration was successful,  a detailed information of the migration can be obtained from  upgradelog.htm  generated by dev env for for each project or solution.

VS Update Tab
This is similar to VS Upgrade except the solution and project files are updated. 
Run
The source folder is scanned recursively for .slns or .*Proj files.  Upgrade is attempted for selected files as described below.
To update a solution, the settings  "FormatVersion", "VSName", "MinimumVisualStudioVersion" , and "VisualStudioVersion" from MigrationHelper.exe.config are used.
To update a project, the settings "ToolsVersion","TargetFrameworkVersion" and "PlatformToolset" from MigrationHelper.exe.config are used.

Reports are generated  as shown below.

The following displays the sample settings.
       
<appSettings>
    <add key="devenvpath" value="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"/>
    <add key="ildasmpath" value="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ildasm.exe"/>
    <add key="dumpbinpath" value="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\dumpbin.exe"/>
    <add key="TargetFrameworkVersion" value="v4.5.2"/>
    <add key="PlatformToolset" value="v140"/>
    <add key="ToolsVersion" value="14.0"/>
    <add key="FormatVersion" value="12.00"/>
    <add key="VSName" value="14"/>
    <add key="VisualStudioVersion" value="14.0.24720.0"/>
    <add key="MinimumVisualStudioVersion" value="10.0.40219.1"/>
</appSettings>
       
 

Source and Binaries can be found here.