/ Check-in [d27f32c6]
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add tool for smoke-testing the UWP VSIX package.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: d27f32c6d72182198ae6d6cf8e385be76335dc65
User & Date: mistachkin 2016-02-25 23:25:00
Context
2016-02-25
23:27
Add some comments in the VSIX test tool. check-in: c871473f user: mistachkin tags: trunk
23:25
Add tool for smoke-testing the UWP VSIX package. check-in: d27f32c6 user: mistachkin tags: trunk
23:22
Enhance checking of prerequisites in the vsixtest tool. Closed-Leaf check-in: 799d5f09 user: mistachkin tags: vsixTest
23:21
Fix an incorrect cost computation for sorting (introduced just a few check-ins ago). Should be NlogN, not NloglogN. check-in: 2459d323 user: drh tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Added vsixtest/App.xaml.

            1  +<Application
            2  +    x:Class="vsixtest.App"
            3  +    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            4  +    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            5  +    xmlns:local="using:vsixtest"
            6  +    RequestedTheme="Light">
            7  +
            8  +</Application>

Added vsixtest/App.xaml.cpp.

            1  +//
            2  +// App.xaml.cpp
            3  +// Implementation of the App class.
            4  +//
            5  +
            6  +#include "pch.h"
            7  +#include "MainPage.xaml.h"
            8  +
            9  +using namespace vsixtest;
           10  +
           11  +using namespace Platform;
           12  +using namespace Windows::ApplicationModel;
           13  +using namespace Windows::ApplicationModel::Activation;
           14  +using namespace Windows::Foundation;
           15  +using namespace Windows::Foundation::Collections;
           16  +using namespace Windows::UI::Xaml;
           17  +using namespace Windows::UI::Xaml::Controls;
           18  +using namespace Windows::UI::Xaml::Controls::Primitives;
           19  +using namespace Windows::UI::Xaml::Data;
           20  +using namespace Windows::UI::Xaml::Input;
           21  +using namespace Windows::UI::Xaml::Interop;
           22  +using namespace Windows::UI::Xaml::Media;
           23  +using namespace Windows::UI::Xaml::Navigation;
           24  +
           25  +/// <summary>
           26  +/// Initializes the singleton application object.  This is the first line of authored code
           27  +/// executed, and as such is the logical equivalent of main() or WinMain().
           28  +/// </summary>
           29  +App::App()
           30  +{
           31  +	InitializeComponent();
           32  +	Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending);
           33  +}
           34  +
           35  +/// <summary>
           36  +/// Invoked when the application is launched normally by the end user.	Other entry points
           37  +/// will be used such as when the application is launched to open a specific file.
           38  +/// </summary>
           39  +/// <param name="e">Details about the launch request and process.</param>
           40  +void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e)
           41  +{
           42  +
           43  +#if _DEBUG
           44  +		// Show graphics profiling information while debugging.
           45  +		if (IsDebuggerPresent())
           46  +		{
           47  +			// Display the current frame rate counters
           48  +			 DebugSettings->EnableFrameRateCounter = true;
           49  +		}
           50  +#endif
           51  +
           52  +	auto rootFrame = dynamic_cast<Frame^>(Window::Current->Content);
           53  +
           54  +	// Do not repeat app initialization when the Window already has content,
           55  +	// just ensure that the window is active
           56  +	if (rootFrame == nullptr)
           57  +	{
           58  +		// Create a Frame to act as the navigation context and associate it with
           59  +		// a SuspensionManager key
           60  +		rootFrame = ref new Frame();
           61  +
           62  +		rootFrame->NavigationFailed += ref new Windows::UI::Xaml::Navigation::NavigationFailedEventHandler(this, &App::OnNavigationFailed);
           63  +
           64  +		if (e->PreviousExecutionState == ApplicationExecutionState::Terminated)
           65  +		{
           66  +			// TODO: Restore the saved session state only when appropriate, scheduling the
           67  +			// final launch steps after the restore is complete
           68  +
           69  +		}
           70  +
           71  +		if (rootFrame->Content == nullptr)
           72  +		{
           73  +			// When the navigation stack isn't restored navigate to the first page,
           74  +			// configuring the new page by passing required information as a navigation
           75  +			// parameter
           76  +			rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
           77  +		}
           78  +		// Place the frame in the current Window
           79  +		Window::Current->Content = rootFrame;
           80  +		// Ensure the current window is active
           81  +		Window::Current->Activate();
           82  +	}
           83  +	else
           84  +	{
           85  +		if (rootFrame->Content == nullptr)
           86  +		{
           87  +			// When the navigation stack isn't restored navigate to the first page,
           88  +			// configuring the new page by passing required information as a navigation
           89  +			// parameter
           90  +			rootFrame->Navigate(TypeName(MainPage::typeid), e->Arguments);
           91  +		}
           92  +		// Ensure the current window is active
           93  +		Window::Current->Activate();
           94  +	}
           95  +}
           96  +
           97  +/// <summary>
           98  +/// Invoked when application execution is being suspended.	Application state is saved
           99  +/// without knowing whether the application will be terminated or resumed with the contents
          100  +/// of memory still intact.
          101  +/// </summary>
          102  +/// <param name="sender">The source of the suspend request.</param>
          103  +/// <param name="e">Details about the suspend request.</param>
          104  +void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e)
          105  +{
          106  +	(void) sender;	// Unused parameter
          107  +	(void) e;	// Unused parameter
          108  +
          109  +	//TODO: Save application state and stop any background activity
          110  +}
          111  +
          112  +/// <summary>
          113  +/// Invoked when Navigation to a certain page fails
          114  +/// </summary>
          115  +/// <param name="sender">The Frame which failed navigation</param>
          116  +/// <param name="e">Details about the navigation failure</param>
          117  +void App::OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e)
          118  +{
          119  +	throw ref new FailureException("Failed to load Page " + e->SourcePageType.Name);
          120  +}

Added vsixtest/App.xaml.h.

            1  +//
            2  +// App.xaml.h
            3  +// Declaration of the App class.
            4  +//
            5  +
            6  +#pragma once
            7  +
            8  +#include "App.g.h"
            9  +
           10  +namespace vsixtest
           11  +{
           12  +	/// <summary>
           13  +	/// Provides application-specific behavior to supplement the default Application class.
           14  +	/// </summary>
           15  +	ref class App sealed
           16  +	{
           17  +	protected:
           18  +		virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override;
           19  +
           20  +	internal:
           21  +		App();
           22  +
           23  +	private:
           24  +		void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e);
           25  +		void OnNavigationFailed(Platform::Object ^sender, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs ^e);
           26  +	};
           27  +}

Added vsixtest/Assets/LockScreenLogo.scale-200.png.

cannot compute difference between binary files

Added vsixtest/Assets/SplashScreen.scale-200.png.

cannot compute difference between binary files

Added vsixtest/Assets/Square150x150Logo.scale-200.png.

cannot compute difference between binary files

Added vsixtest/Assets/Square44x44Logo.scale-200.png.

cannot compute difference between binary files

Added vsixtest/Assets/Square44x44Logo.targetsize-24_altform-unplated.png.

cannot compute difference between binary files

Added vsixtest/Assets/StoreLogo.png.

cannot compute difference between binary files

Added vsixtest/Assets/Wide310x150Logo.scale-200.png.

cannot compute difference between binary files

Added vsixtest/MainPage.xaml.

            1  +<Page
            2  +    x:Class="vsixtest.MainPage"
            3  +    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            4  +    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            5  +    xmlns:local="using:vsixtest"
            6  +    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            7  +    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            8  +    mc:Ignorable="d">
            9  +
           10  +    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
           11  +
           12  +    </Grid>
           13  +</Page>

Added vsixtest/MainPage.xaml.cpp.

            1  +//
            2  +// MainPage.xaml.cpp
            3  +// Implementation of the MainPage class.
            4  +//
            5  +
            6  +#include "pch.h"
            7  +#include "MainPage.xaml.h"
            8  +#include "sqlite3.h"
            9  +
           10  +using namespace vsixtest;
           11  +
           12  +using namespace Platform;
           13  +using namespace Windows::Foundation;
           14  +using namespace Windows::Foundation::Collections;
           15  +using namespace Windows::UI::Xaml;
           16  +using namespace Windows::UI::Xaml::Controls;
           17  +using namespace Windows::UI::Xaml::Controls::Primitives;
           18  +using namespace Windows::UI::Xaml::Data;
           19  +using namespace Windows::UI::Xaml::Input;
           20  +using namespace Windows::UI::Xaml::Media;
           21  +using namespace Windows::UI::Xaml::Navigation;
           22  +
           23  +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
           24  +
           25  +MainPage::MainPage()
           26  +{
           27  +	InitializeComponent();
           28  +	UseSQLite();
           29  +}
           30  +
           31  +void MainPage::UseSQLite(void)
           32  +{
           33  +    int rc = SQLITE_OK;
           34  +    sqlite3 *pDb = nullptr;
           35  +
           36  +    rc = sqlite3_open_v2("test.db", &pDb,
           37  +	SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nullptr);
           38  +
           39  +    if (rc != SQLITE_OK)
           40  +	throw ref new FailureException("Failed to open database.");
           41  +
           42  +    rc = sqlite3_exec(pDb, "VACUUM;", nullptr, nullptr, nullptr);
           43  +
           44  +    if (rc != SQLITE_OK)
           45  +	throw ref new FailureException("Failed to vacuum database.");
           46  +
           47  +    rc = sqlite3_close(pDb);
           48  +
           49  +    if (rc != SQLITE_OK)
           50  +	throw ref new FailureException("Failed to close database.");
           51  +
           52  +    pDb = nullptr;
           53  +}

Added vsixtest/MainPage.xaml.h.

            1  +//
            2  +// MainPage.xaml.h
            3  +// Declaration of the MainPage class.
            4  +//
            5  +
            6  +#pragma once
            7  +
            8  +#include "MainPage.g.h"
            9  +
           10  +namespace vsixtest
           11  +{
           12  +	/// <summary>
           13  +	/// An empty page that can be used on its own or navigated to within a Frame.
           14  +	/// </summary>
           15  +	public ref class MainPage sealed
           16  +	{
           17  +	public:
           18  +		MainPage();
           19  +		void UseSQLite(void);
           20  +
           21  +	};
           22  +}

Added vsixtest/Package.appxmanifest.

            1  +<?xml version="1.0" encoding="utf-8"?>
            2  +
            3  +<Package
            4  +  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
            5  +  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
            6  +  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
            7  +  IgnorableNamespaces="uap mp">
            8  +
            9  +  <Identity
           10  +    Name="bb52b3e1-5c8a-4516-a5ff-8b9f9baadef7"
           11  +    Publisher="CN=mistachkin"
           12  +    Version="1.0.0.0" />
           13  +
           14  +  <mp:PhoneIdentity PhoneProductId="bb52b3e1-5c8a-4516-a5ff-8b9f9baadef7" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
           15  +
           16  +  <Properties>
           17  +    <DisplayName>vsixtest</DisplayName>
           18  +    <PublisherDisplayName>mistachkin</PublisherDisplayName>
           19  +    <Logo>Assets\StoreLogo.png</Logo>
           20  +  </Properties>
           21  +
           22  +  <Dependencies>
           23  +    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
           24  +  </Dependencies>
           25  +
           26  +  <Resources>
           27  +    <Resource Language="x-generate"/>
           28  +  </Resources>
           29  +
           30  +  <Applications>
           31  +    <Application Id="App"
           32  +      Executable="$targetnametoken$.exe"
           33  +      EntryPoint="vsixtest.App">
           34  +      <uap:VisualElements
           35  +        DisplayName="vsixtest"
           36  +        Square150x150Logo="Assets\Square150x150Logo.png"
           37  +        Square44x44Logo="Assets\Square44x44Logo.png"
           38  +        Description="vsixtest"
           39  +        BackgroundColor="transparent">
           40  +        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
           41  +        <uap:SplashScreen Image="Assets\SplashScreen.png" />
           42  +      </uap:VisualElements>
           43  +    </Application>
           44  +  </Applications>
           45  +
           46  +  <Capabilities>
           47  +    <Capability Name="internetClient" />
           48  +  </Capabilities>
           49  +</Package>

Added vsixtest/pch.cpp.

            1  +//
            2  +// pch.cpp
            3  +// Include the standard header and generate the precompiled header.
            4  +//
            5  +
            6  +#include "pch.h"

Added vsixtest/pch.h.

            1  +//
            2  +// pch.h
            3  +// Header for standard system include files.
            4  +//
            5  +
            6  +#pragma once
            7  +
            8  +#include <collection.h>
            9  +#include <ppltasks.h>
           10  +
           11  +#include "App.xaml.h"

Added vsixtest/vsixtest.sln.

            1  +Microsoft Visual Studio Solution File, Format Version 12.00
            2  +# Visual Studio 14
            3  +VisualStudioVersion = 14.0.24720.0
            4  +MinimumVisualStudioVersion = 10.0.40219.1
            5  +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vsixtest", "vsixtest.vcxproj", "{60BB14A5-0871-4656-BC38-4F0958230F9A}"
            6  +EndProject
            7  +Global
            8  +	GlobalSection(SolutionConfigurationPlatforms) = preSolution
            9  +		Debug|ARM = Debug|ARM
           10  +		Debug|x64 = Debug|x64
           11  +		Debug|x86 = Debug|x86
           12  +		Release|ARM = Release|ARM
           13  +		Release|x64 = Release|x64
           14  +		Release|x86 = Release|x86
           15  +	EndGlobalSection
           16  +	GlobalSection(ProjectConfigurationPlatforms) = postSolution
           17  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|ARM.ActiveCfg = Debug|ARM
           18  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|ARM.Build.0 = Debug|ARM
           19  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|ARM.Deploy.0 = Debug|ARM
           20  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|x64.ActiveCfg = Debug|x64
           21  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|x64.Build.0 = Debug|x64
           22  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|x64.Deploy.0 = Debug|x64
           23  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|x86.ActiveCfg = Debug|Win32
           24  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|x86.Build.0 = Debug|Win32
           25  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Debug|x86.Deploy.0 = Debug|Win32
           26  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|ARM.ActiveCfg = Release|ARM
           27  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|ARM.Build.0 = Release|ARM
           28  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|ARM.Deploy.0 = Release|ARM
           29  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|x64.ActiveCfg = Release|x64
           30  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|x64.Build.0 = Release|x64
           31  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|x64.Deploy.0 = Release|x64
           32  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|x86.ActiveCfg = Release|Win32
           33  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|x86.Build.0 = Release|Win32
           34  +		{60BB14A5-0871-4656-BC38-4F0958230F9A}.Release|x86.Deploy.0 = Release|Win32
           35  +	EndGlobalSection
           36  +	GlobalSection(SolutionProperties) = preSolution
           37  +		HideSolutionNode = FALSE
           38  +	EndGlobalSection
           39  +EndGlobal

Added vsixtest/vsixtest.tcl.

            1  +#!/usr/bin/tclsh
            2  +#
            3  +# This script is used to quickly test a VSIX (Visual Studio Extension) file
            4  +# with Visual Studio 2015 on Windows.
            5  +#
            6  +# PREREQUISITES
            7  +#
            8  +# 1. This tool must be executed with "elevated administrator" privileges.
            9  +#
           10  +# 2. Tcl 8.4 and later are supported, earlier versions have not been tested.
           11  +#
           12  +# 3. The "sqlite-UWP-output.vsix" file is assumed to exist in the parent
           13  +#    directory of the directory containing this script.  The [optional] first
           14  +#    command line argument to this script may be used to specify an alternate
           15  +#    file.  However, currently, the file must be compatible with both Visual
           16  +#    Studio 2015 and the Universal Windows Platform.
           17  +#
           18  +# 4. The "VERSION" file is assumed to exist in the parent directory of the
           19  +#    directory containing this script.  It must contain a version number that
           20  +#    matches the VSIX file being tested.
           21  +#
           22  +# 5. The temporary directory specified in the TEMP or TMP environment variables
           23  +#    must refer to an existing directory writable by the current user.
           24  +#
           25  +# 6. The VS140COMNTOOLS environment variable must refer to the Visual Studio
           26  +#    2015 common tools directory.
           27  +#
           28  +# USAGE
           29  +#
           30  +# The first argument to this script is optional.  If specified, it must be the
           31  +# name of the VSIX file to test.
           32  +#
           33  +package require Tcl 8.4
           34  +
           35  +proc fail { {error ""} {usage false} } {
           36  +  if {[string length $error] > 0} then {
           37  +    puts stdout $error
           38  +    if {!$usage} then {exit 1}
           39  +  }
           40  +
           41  +  puts stdout "usage:\
           42  +[file tail [info nameofexecutable]]\
           43  +[file tail [info script]] \[vsixFile\]"
           44  +
           45  +  exit 1
           46  +}
           47  +
           48  +proc isWindows {} {
           49  +  #
           50  +  # NOTE: Returns non-zero only when running on Windows.
           51  +  #
           52  +  return [expr {[info exists ::tcl_platform(platform)] && \
           53  +      $::tcl_platform(platform) eq "windows"}]
           54  +}
           55  +
           56  +proc isAdministrator {} {
           57  +  #
           58  +  # NOTE: Returns non-zero only when running as "elevated administrator".
           59  +  #
           60  +  if {[isWindows]} then {
           61  +    if {[catch {exec -- whoami /groups} groups] == 0} then {
           62  +      set groups [string map [list \r\n \n] $groups]
           63  +
           64  +      foreach group [split $groups \n] {
           65  +        #
           66  +        # NOTE: Match this group line against the "well-known" SID for
           67  +        #       the "Administrators" group on Windows.
           68  +        #
           69  +        if {[regexp -- {\sS-1-5-32-544\s} $group]} then {
           70  +          #
           71  +          # NOTE: Match this group line against the attributes column
           72  +          #       sub-value that should be present when running with
           73  +          #       elevated administrator credentials.
           74  +          #
           75  +          if {[regexp -- {\sEnabled group(?:,|\s)} $group]} then {
           76  +            return true
           77  +          }
           78  +        }
           79  +      }
           80  +    }
           81  +  }
           82  +
           83  +  return false
           84  +}
           85  +
           86  +proc getEnvironmentVariable { name } {
           87  +  #
           88  +  # NOTE: Returns the value of the specified environment variable or an empty
           89  +  #       string for environment variables that do not exist in the current
           90  +  #       process environment.
           91  +  #
           92  +  return [expr {[info exists ::env($name)] ? $::env($name) : ""}]
           93  +}
           94  +
           95  +proc getTemporaryPath {} {
           96  +  #
           97  +  # NOTE: Returns the normalized path to the first temporary directory found
           98  +  #       in the typical set of environment variables used for that purpose
           99  +  #       or an empty string to signal a failure to locate such a directory.
          100  +  #
          101  +  set names [list]
          102  +
          103  +  foreach name [list TEMP TMP] {
          104  +    lappend names [string toupper $name] [string tolower $name] \
          105  +        [string totitle $name]
          106  +  }
          107  +
          108  +  foreach name $names {
          109  +    set value [getEnvironmentVariable $name]
          110  +
          111  +    if {[string length $value] > 0} then {
          112  +      return [file normalize $value]
          113  +    }
          114  +  }
          115  +
          116  +  return ""
          117  +}
          118  +
          119  +proc appendArgs { args } {
          120  +  #
          121  +  # NOTE: Returns all passed arguments joined together as a single string
          122  +  #       with no intervening spaces between arguments.
          123  +  #
          124  +  eval append result $args
          125  +}
          126  +
          127  +proc readFile { fileName } {
          128  +  #
          129  +  # NOTE: Reads and returns the entire contents of the specified file, which
          130  +  #       may contain binary data.
          131  +  #
          132  +  set file_id [open $fileName RDONLY]
          133  +  fconfigure $file_id -encoding binary -translation binary
          134  +  set result [read $file_id]
          135  +  close $file_id
          136  +  return $result
          137  +}
          138  +
          139  +proc writeFile { fileName data } {
          140  +  #
          141  +  # NOTE: Writes the entire contents of the specified file, which may contain
          142  +  #       binary data.
          143  +  #
          144  +  set file_id [open $fileName {WRONLY CREAT TRUNC}]
          145  +  fconfigure $file_id -encoding binary -translation binary
          146  +  puts -nonewline $file_id $data
          147  +  close $file_id
          148  +  return ""
          149  +}
          150  +
          151  +proc putsAndEval { command } {
          152  +  #
          153  +  # NOTE: Outputs a command to the standard output channel and then evaluates
          154  +  #       it in the callers context.
          155  +  #
          156  +  catch {
          157  +    puts stdout [appendArgs "Running: " [lrange $command 1 end] ...\n]
          158  +  }
          159  +
          160  +  return [uplevel 1 $command]
          161  +}
          162  +
          163  +proc isBadDirectory { directory } {
          164  +  #
          165  +  # NOTE: Returns non-zero if the directory is empty, does not exist, -OR- is
          166  +  #       not a directory.
          167  +  #
          168  +  catch {
          169  +    puts stdout [appendArgs "Checking directory \"" $directory \"...\n]
          170  +  }
          171  +
          172  +  return [expr {[string length $directory] == 0 || \
          173  +      ![file exists $directory] || ![file isdirectory $directory]}]
          174  +}
          175  +
          176  +proc isBadFile { fileName } {
          177  +  #
          178  +  # NOTE: Returns non-zero if the file name is empty, does not exist, -OR- is
          179  +  #       not a regular file.
          180  +  #
          181  +  catch {
          182  +    puts stdout [appendArgs "Checking file \"" $fileName \"...\n]
          183  +  }
          184  +
          185  +  return [expr {[string length $fileName] == 0 || \
          186  +      ![file exists $fileName] || ![file isfile $fileName]}]
          187  +}
          188  +
          189  +#
          190  +# NOTE: This is the entry point for this script.
          191  +#
          192  +set script [file normalize [info script]]
          193  +
          194  +if {[string length $script] == 0} then {
          195  +  fail "script file currently being evaluated is unknown" true
          196  +}
          197  +
          198  +if {![isWindows]} then {
          199  +  fail "this tool only works properly on Windows"
          200  +}
          201  +
          202  +if {![isAdministrator]} then {
          203  +  fail "this tool must run with \"elevated administrator\" privileges"
          204  +}
          205  +
          206  +set path [file normalize [file dirname $script]]
          207  +set argc [llength $argv]; if {$argc > 1} then {fail "" true}
          208  +
          209  +if {$argc == 1} then {
          210  +  set vsixFileName [lindex $argv 0]
          211  +} else {
          212  +  set vsixFileName [file join \
          213  +      [file dirname $path] sqlite-UWP-output.vsix]
          214  +}
          215  +
          216  +###############################################################################
          217  +
          218  +if {[isBadFile $vsixFileName]} then {
          219  +  fail [appendArgs \
          220  +      "VSIX file \"" $vsixFileName "\" does not exist"]
          221  +}
          222  +
          223  +set versionFileName [file join [file dirname $path] VERSION]
          224  +
          225  +if {[isBadFile $versionFileName]} then {
          226  +  fail [appendArgs \
          227  +      "Version file \"" $versionFileName "\" does not exist"]
          228  +}
          229  +
          230  +set projectTemplateFileName [file join $path vsixtest.vcxproj.data]
          231  +
          232  +if {[isBadFile $projectTemplateFileName]} then {
          233  +  fail [appendArgs \
          234  +      "Project template file \"" $projectTemplateFileName \
          235  +      "\" does not exist"]
          236  +}
          237  +
          238  +set envVarName VS140COMNTOOLS
          239  +set vsDirectory [getEnvironmentVariable $envVarName]
          240  +
          241  +if {[isBadDirectory $vsDirectory]} then {
          242  +  fail [appendArgs \
          243  +      "Visual Studio 2015 directory \"" $vsDirectory \
          244  +      "\" from environment variable \"" $envVarName \
          245  +      "\" does not exist"]
          246  +}
          247  +
          248  +set vsixInstaller [file join \
          249  +    [file dirname $vsDirectory] IDE VSIXInstaller.exe]
          250  +
          251  +if {[isBadFile $vsixInstaller]} then {
          252  +  fail [appendArgs \
          253  +      "Visual Studio 2015 VSIX installer \"" $vsixInstaller \
          254  +      "\" does not exist"]
          255  +}
          256  +
          257  +set envVarName ProgramFiles
          258  +set programFiles [getEnvironmentVariable $envVarName]
          259  +
          260  +if {[isBadDirectory $programFiles]} then {
          261  +  fail [appendArgs \
          262  +      "Program Files directory \"" $programFiles \
          263  +      "\" from environment variable \"" $envVarName \
          264  +      "\" does not exist"]
          265  +}
          266  +
          267  +set msBuild [file join $programFiles MSBuild 14.0 Bin MSBuild.exe]
          268  +
          269  +if {[isBadFile $msBuild]} then {
          270  +  fail [appendArgs \
          271  +      "MSBuild v14.0 executable file \"" $msBuild \
          272  +      "\" does not exist"]
          273  +}
          274  +
          275  +set temporaryDirectory [getTemporaryPath]
          276  +
          277  +if {[isBadDirectory $temporaryDirectory]} then {
          278  +  fail [appendArgs \
          279  +      "Temporary directory \"" $temporaryDirectory \
          280  +      "\" does not exist"]
          281  +}
          282  +
          283  +###############################################################################
          284  +
          285  +set installLogFileName [appendArgs \
          286  +    [file rootname [file tail $vsixFileName]] \
          287  +    -install- [pid] .log]
          288  +
          289  +set commands(1) [list exec [file nativename $vsixInstaller]]
          290  +
          291  +lappend commands(1) /quiet /norepair
          292  +lappend commands(1) [appendArgs /logFile: $installLogFileName]
          293  +lappend commands(1) [file nativename $vsixFileName]
          294  +
          295  +###############################################################################
          296  +
          297  +set buildLogFileName [appendArgs \
          298  +    [file rootname [file tail $vsixFileName]] \
          299  +    -build-%configuration%-%platform%- [pid] .log]
          300  +
          301  +set commands(2) [list exec [file nativename $msBuild]]
          302  +
          303  +lappend commands(2) [file nativename [file join $path vsixtest.sln]]
          304  +lappend commands(2) /target:Rebuild
          305  +lappend commands(2) /property:Configuration=%configuration%
          306  +lappend commands(2) /property:Platform=%platform%
          307  +
          308  +lappend commands(2) [appendArgs \
          309  +    /logger:FileLogger,Microsoft.Build.Engine\;Logfile= \
          310  +    [file nativename [file join $temporaryDirectory \
          311  +    $buildLogFileName]] \;Verbosity=diagnostic]
          312  +
          313  +###############################################################################
          314  +
          315  +set uninstallLogFileName [appendArgs \
          316  +    [file rootname [file tail $vsixFileName]] \
          317  +    -uninstall- [pid] .log]
          318  +
          319  +set commands(3) [list exec [file nativename $vsixInstaller]]
          320  +
          321  +lappend commands(3) /quiet /norepair
          322  +lappend commands(3) [appendArgs /logFile: $uninstallLogFileName]
          323  +lappend commands(3) [appendArgs /uninstall:SQLite.UWP.2015]
          324  +
          325  +###############################################################################
          326  +
          327  +if {1} then {
          328  +  catch {
          329  +    puts stdout [appendArgs \
          330  +        "Install log: \"" [file nativename [file join \
          331  +        $temporaryDirectory $installLogFileName]] \"\n]
          332  +  }
          333  +
          334  +  catch {
          335  +    puts stdout [appendArgs \
          336  +        "Build logs: \"" [file nativename [file join \
          337  +        $temporaryDirectory $buildLogFileName]] \"\n]
          338  +  }
          339  +
          340  +  catch {
          341  +    puts stdout [appendArgs \
          342  +        "Uninstall log: \"" [file nativename [file join \
          343  +        $temporaryDirectory $uninstallLogFileName]] \"\n]
          344  +  }
          345  +}
          346  +
          347  +###############################################################################
          348  +
          349  +if {1} then {
          350  +  putsAndEval $commands(1)
          351  +
          352  +  set versionNumber [string trim [readFile $versionFileName]]
          353  +  set data [readFile $projectTemplateFileName]
          354  +  set data [string map [list %versionNumber% $versionNumber] $data]
          355  +
          356  +  set projectFileName [file join $path vsixtest.vcxproj]
          357  +  writeFile $projectFileName $data
          358  +
          359  +  set platforms [list x86 x64 ARM]
          360  +  set configurations [list Debug Release]
          361  +
          362  +  foreach platform $platforms {
          363  +    foreach configuration $configurations {
          364  +      putsAndEval [string map [list \
          365  +          %platform% $platform %configuration% $configuration] \
          366  +          $commands(2)]
          367  +    }
          368  +  }
          369  +
          370  +  putsAndEval $commands(3)
          371  +}

Added vsixtest/vsixtest.vcxproj.data.

            1  +<?xml version="1.0" encoding="utf-8"?>
            2  +<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
            3  +  <PropertyGroup Label="Globals">
            4  +    <ProjectGuid>{60bb14a5-0871-4656-bc38-4f0958230f9a}</ProjectGuid>
            5  +    <RootNamespace>vsixtest</RootNamespace>
            6  +    <DefaultLanguage>en-US</DefaultLanguage>
            7  +    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
            8  +    <AppContainerApplication>true</AppContainerApplication>
            9  +    <ApplicationType>Windows Store</ApplicationType>
           10  +    <WindowsTargetPlatformVersion>10.0.10586.0</WindowsTargetPlatformVersion>
           11  +    <WindowsTargetPlatformMinVersion>10.0.10586.0</WindowsTargetPlatformMinVersion>
           12  +    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
           13  +  </PropertyGroup>
           14  +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
           15  +  <ItemGroup Label="ProjectConfigurations">
           16  +    <ProjectConfiguration Include="Debug|ARM">
           17  +      <Configuration>Debug</Configuration>
           18  +      <Platform>ARM</Platform>
           19  +    </ProjectConfiguration>
           20  +    <ProjectConfiguration Include="Debug|Win32">
           21  +      <Configuration>Debug</Configuration>
           22  +      <Platform>Win32</Platform>
           23  +    </ProjectConfiguration>
           24  +    <ProjectConfiguration Include="Debug|x64">
           25  +      <Configuration>Debug</Configuration>
           26  +      <Platform>x64</Platform>
           27  +    </ProjectConfiguration>
           28  +    <ProjectConfiguration Include="Release|ARM">
           29  +      <Configuration>Release</Configuration>
           30  +      <Platform>ARM</Platform>
           31  +    </ProjectConfiguration>
           32  +    <ProjectConfiguration Include="Release|Win32">
           33  +      <Configuration>Release</Configuration>
           34  +      <Platform>Win32</Platform>
           35  +    </ProjectConfiguration>
           36  +    <ProjectConfiguration Include="Release|x64">
           37  +      <Configuration>Release</Configuration>
           38  +      <Platform>x64</Platform>
           39  +    </ProjectConfiguration>
           40  +  </ItemGroup>
           41  +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
           42  +    <ConfigurationType>Application</ConfigurationType>
           43  +    <UseDebugLibraries>true</UseDebugLibraries>
           44  +    <PlatformToolset>v140</PlatformToolset>
           45  +  </PropertyGroup>
           46  +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
           47  +    <ConfigurationType>Application</ConfigurationType>
           48  +    <UseDebugLibraries>true</UseDebugLibraries>
           49  +    <PlatformToolset>v140</PlatformToolset>
           50  +  </PropertyGroup>
           51  +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
           52  +    <ConfigurationType>Application</ConfigurationType>
           53  +    <UseDebugLibraries>true</UseDebugLibraries>
           54  +    <PlatformToolset>v140</PlatformToolset>
           55  +  </PropertyGroup>
           56  +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
           57  +    <ConfigurationType>Application</ConfigurationType>
           58  +    <UseDebugLibraries>false</UseDebugLibraries>
           59  +    <WholeProgramOptimization>true</WholeProgramOptimization>
           60  +    <PlatformToolset>v140</PlatformToolset>
           61  +    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
           62  +  </PropertyGroup>
           63  +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
           64  +    <ConfigurationType>Application</ConfigurationType>
           65  +    <UseDebugLibraries>false</UseDebugLibraries>
           66  +    <WholeProgramOptimization>true</WholeProgramOptimization>
           67  +    <PlatformToolset>v140</PlatformToolset>
           68  +    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
           69  +  </PropertyGroup>
           70  +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
           71  +    <ConfigurationType>Application</ConfigurationType>
           72  +    <UseDebugLibraries>false</UseDebugLibraries>
           73  +    <WholeProgramOptimization>true</WholeProgramOptimization>
           74  +    <PlatformToolset>v140</PlatformToolset>
           75  +    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
           76  +  </PropertyGroup>
           77  +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
           78  +  <ImportGroup Label="ExtensionSettings">
           79  +  </ImportGroup>
           80  +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
           81  +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
           82  +    <Import Project="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props" Condition="exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props')" />
           83  +  </ImportGroup>
           84  +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
           85  +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
           86  +    <Import Project="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props" Condition="exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props')" />
           87  +  </ImportGroup>
           88  +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
           89  +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
           90  +    <Import Project="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props" Condition="exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props')" />
           91  +  </ImportGroup>
           92  +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
           93  +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
           94  +    <Import Project="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props" Condition="exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props')" />
           95  +  </ImportGroup>
           96  +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
           97  +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
           98  +    <Import Project="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props" Condition="exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props')" />
           99  +  </ImportGroup>
          100  +  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
          101  +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
          102  +    <Import Project="$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props" Condition="exists('$([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformExtensionSDKLocation(`SQLite.UWP.2015, Version=%versionNumber%`, $(TargetPlatformIdentifier), $(TargetPlatformVersion),  $(SDKReferenceDirectoryRoot), $(SDKExtensionDirectoryRoot), $(SDKReferenceRegistryRoot)))\DesignTime\CommonConfiguration\Neutral\SQLite.UWP.2015.props')" />
          103  +  </ImportGroup>
          104  +  <PropertyGroup Label="UserMacros" />
          105  +  <PropertyGroup>
          106  +    <PackageCertificateKeyFile>vsixtest_TemporaryKey.pfx</PackageCertificateKeyFile>
          107  +  </PropertyGroup>
          108  +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
          109  +    <ClCompile>
          110  +      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
          111  +      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
          112  +    </ClCompile>
          113  +  </ItemDefinitionGroup>
          114  +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
          115  +    <ClCompile>
          116  +      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
          117  +      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
          118  +    </ClCompile>
          119  +  </ItemDefinitionGroup>
          120  +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
          121  +    <ClCompile>
          122  +      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
          123  +      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
          124  +    </ClCompile>
          125  +  </ItemDefinitionGroup>
          126  +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
          127  +    <ClCompile>
          128  +      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
          129  +      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
          130  +    </ClCompile>
          131  +  </ItemDefinitionGroup>
          132  +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
          133  +    <ClCompile>
          134  +      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
          135  +      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
          136  +    </ClCompile>
          137  +  </ItemDefinitionGroup>
          138  +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
          139  +    <ClCompile>
          140  +      <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
          141  +      <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
          142  +    </ClCompile>
          143  +  </ItemDefinitionGroup>
          144  +  <ItemGroup>
          145  +    <ClInclude Include="pch.h" />
          146  +    <ClInclude Include="App.xaml.h">
          147  +      <DependentUpon>App.xaml</DependentUpon>
          148  +    </ClInclude>
          149  +    <ClInclude Include="MainPage.xaml.h">
          150  +      <DependentUpon>MainPage.xaml</DependentUpon>
          151  +    </ClInclude>
          152  +  </ItemGroup>
          153  +  <ItemGroup>
          154  +    <ApplicationDefinition Include="App.xaml">
          155  +      <SubType>Designer</SubType>
          156  +    </ApplicationDefinition>
          157  +    <Page Include="MainPage.xaml">
          158  +      <SubType>Designer</SubType>
          159  +    </Page>
          160  +  </ItemGroup>
          161  +  <ItemGroup>
          162  +    <AppxManifest Include="Package.appxmanifest">
          163  +      <SubType>Designer</SubType>
          164  +    </AppxManifest>
          165  +    <None Include="vsixtest_TemporaryKey.pfx" />
          166  +  </ItemGroup>
          167  +  <ItemGroup>
          168  +    <Image Include="Assets\LockScreenLogo.scale-200.png" />
          169  +    <Image Include="Assets\SplashScreen.scale-200.png" />
          170  +    <Image Include="Assets\Square150x150Logo.scale-200.png" />
          171  +    <Image Include="Assets\Square44x44Logo.scale-200.png" />
          172  +    <Image Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
          173  +    <Image Include="Assets\StoreLogo.png" />
          174  +    <Image Include="Assets\Wide310x150Logo.scale-200.png" />
          175  +  </ItemGroup>
          176  +  <ItemGroup>
          177  +    <ClCompile Include="App.xaml.cpp">
          178  +      <DependentUpon>App.xaml</DependentUpon>
          179  +    </ClCompile>
          180  +    <ClCompile Include="MainPage.xaml.cpp">
          181  +      <DependentUpon>MainPage.xaml</DependentUpon>
          182  +    </ClCompile>
          183  +    <ClCompile Include="pch.cpp">
          184  +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
          185  +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
          186  +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
          187  +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
          188  +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
          189  +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
          190  +    </ClCompile>
          191  +  </ItemGroup>
          192  +  <ItemGroup>
          193  +    <SDKReference Include="SQLite.UWP.2015, Version=%versionNumber%" />
          194  +  </ItemGroup>
          195  +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
          196  +  <ImportGroup Label="ExtensionTargets">
          197  +  </ImportGroup>
          198  +</Project>

Added vsixtest/vsixtest.vcxproj.filters.

            1  +<?xml version="1.0" encoding="utf-8"?>
            2  +<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
            3  +  <ItemGroup>
            4  +    <Filter Include="Common">
            5  +      <UniqueIdentifier>60bb14a5-0871-4656-bc38-4f0958230f9a</UniqueIdentifier>
            6  +    </Filter>
            7  +    <Filter Include="Assets">
            8  +      <UniqueIdentifier>e6271362-8f96-476d-907f-4da227b02435</UniqueIdentifier>
            9  +      <Extensions>bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png</Extensions>
           10  +    </Filter>
           11  +  </ItemGroup>
           12  +  <ItemGroup>
           13  +    <ApplicationDefinition Include="App.xaml" />
           14  +  </ItemGroup>
           15  +  <ItemGroup>
           16  +    <ClCompile Include="App.xaml.cpp" />
           17  +    <ClCompile Include="MainPage.xaml.cpp" />
           18  +    <ClCompile Include="pch.cpp" />
           19  +  </ItemGroup>
           20  +  <ItemGroup>
           21  +    <ClInclude Include="pch.h" />
           22  +    <ClInclude Include="App.xaml.h" />
           23  +    <ClInclude Include="MainPage.xaml.h" />
           24  +  </ItemGroup>
           25  +  <ItemGroup>
           26  +    <Image Include="Assets\LockScreenLogo.scale-200.png">
           27  +      <Filter>Assets</Filter>
           28  +    </Image>
           29  +    <Image Include="Assets\SplashScreen.scale-200.png">
           30  +      <Filter>Assets</Filter>
           31  +    </Image>
           32  +    <Image Include="Assets\Square150x150Logo.scale-200.png">
           33  +      <Filter>Assets</Filter>
           34  +    </Image>
           35  +    <Image Include="Assets\Square44x44Logo.scale-200.png">
           36  +      <Filter>Assets</Filter>
           37  +    </Image>
           38  +    <Image Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png">
           39  +      <Filter>Assets</Filter>
           40  +    </Image>
           41  +    <Image Include="Assets\StoreLogo.png">
           42  +      <Filter>Assets</Filter>
           43  +    </Image>
           44  +    <Image Include="Assets\Wide310x150Logo.scale-200.png">
           45  +      <Filter>Assets</Filter>
           46  +    </Image>
           47  +  </ItemGroup>
           48  +  <ItemGroup>
           49  +    <AppxManifest Include="Package.appxmanifest" />
           50  +  </ItemGroup>
           51  +  <ItemGroup>
           52  +    <None Include="vsixtest_TemporaryKey.pfx" />
           53  +  </ItemGroup>
           54  +  <ItemGroup>
           55  +    <Page Include="MainPage.xaml" />
           56  +  </ItemGroup>
           57  +</Project>

Added vsixtest/vsixtest_TemporaryKey.pfx.

cannot compute difference between binary files