From a4c37149e4763ef65b46b6c37732189701e595e8 Mon Sep 17 00:00:00 2001
From: Luke Longley <18177025+llongley@users.noreply.github.com>
Date: Mon, 15 Mar 2021 03:34:30 -0700
Subject: [PATCH] Fix WACK certification error for transitive WinUI references
(#4218)
WACK expects to be able to find WinMDs for type resolution purposes in the root of the AppX, but when WinUI 2 is referenced via framework package, the WinMD is instead placed in a WinMetadata subdirectory. As a result, applications that reference nuget packages with references to WinUI 2, WACK certification fails. I'm not sure whether placing the WinMD file in that directory is still needed, so to work around this issue in the safest manner, this adds an additional build target that places the WinMD where WACK certification needs it to be.
An example of an issue that will be resolved by this fix: windows-toolkit/Lottie-Windows#214
---
.../MUX-NugetReleaseTest-Job.yml | 5 +
.../MUX-WACKTests-Job.yml | 5 +
.../NuSpecs/MUXControls-Nuget-Common.targets | 43 +++++
.../MUXControls-Nuget-FrameworkPackage.props | 33 ----
.../AppThatUsesMUXIndirectly.csproj | 5 +-
.../AppThatUsesMUXIndirectly/MainPage.xaml | 1 -
.../AppThatUsesMUXIndirectly/MainPage.xaml.cs | 8 +-
.../MUXCInterfaceImplementation.cpp | 22 +++
.../MUXCInterfaceImplementation.h | 26 +++
.../MUXCInterfaceImplementation.idl | 8 +
.../PropertySheet.props | 16 ++
.../RuntimeComponentThatUsesMUX.def | 3 +
...RuntimeComponentThatUsesMUX.native.targets | 14 ++
.../RuntimeComponentThatUsesMUX.nuspec | 28 +++
.../RuntimeComponentThatUsesMUX.sln | 43 +++++
.../RuntimeComponentThatUsesMUX.targets | 16 ++
.../RuntimeComponentThatUsesMUX.vcxproj | 164 ++++++++++++++++++
...untimeComponentThatUsesMUX.vcxproj.filters | 35 ++++
...ntimeComponentThatUsesMUX_TemporaryKey.pfx | Bin 0 -> 2528 bytes
.../packages.config | 5 +
.../RuntimeComponentThatUsesMUX/pch.cpp | 1 +
.../RuntimeComponentThatUsesMUX/pch.h | 16 ++
.../RuntimeComponentThatUsesMUX/readme.txt | 23 +++
23 files changed, 483 insertions(+), 37 deletions(-)
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.cpp
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.h
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.idl
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/PropertySheet.props
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.def
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.native.targets
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.nuspec
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.sln
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.targets
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj.filters
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX_TemporaryKey.pfx
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/packages.config
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.cpp
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.h
create mode 100644 test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/readme.txt
diff --git a/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml b/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml
index 2d07a725a5..eaa4825550 100644
--- a/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml
+++ b/build/AzurePipelinesTemplates/MUX-NugetReleaseTest-Job.yml
@@ -75,6 +75,11 @@ jobs:
.\test\MUXControlsReleaseTest\updateUsedNugetPackageVersion.ps1 $newVersion
displayName: Update proj files to use candidate nupkg.
+ - template: MUX-BuildProject-Steps.yml
+ parameters:
+ solutionPath: test\MUXControlsReleaseTest\RuntimeComponentThatUsesMUX\RuntimeComponentThatUsesMUX.sln
+ artifactName: ${{ parameters.buildArtifactName }}
+
- template: MUX-BuildProject-Steps.yml
parameters:
solutionPath: $(solutionPath)
diff --git a/build/AzurePipelinesTemplates/MUX-WACKTests-Job.yml b/build/AzurePipelinesTemplates/MUX-WACKTests-Job.yml
index 733f9b7ff7..e57c60ae73 100644
--- a/build/AzurePipelinesTemplates/MUX-WACKTests-Job.yml
+++ b/build/AzurePipelinesTemplates/MUX-WACKTests-Job.yml
@@ -25,4 +25,9 @@ jobs:
- task: PkgESWACKTests@10
inputs:
AppxFolder: '$(artifactDownloadPath)\${{parameters.artifactName}}\$(BuildConfiguration)\$(BuildPlatform)\NugetPackageTestApp\AppPackages\NugetPackageTestApp_Test'
+ WACKFailbuild: true
+
+ - task: PkgESWACKTests@10
+ inputs:
+ AppxFolder: '$(artifactDownloadPath)\${{parameters.artifactName}}\$(BuildConfiguration)\$(BuildPlatform)\AppThatUsesMUXIndirectly\AppPackages\AppThatUsesMUXIndirectly_Test'
WACKFailbuild: true
\ No newline at end of file
diff --git a/build/NuSpecs/MUXControls-Nuget-Common.targets b/build/NuSpecs/MUXControls-Nuget-Common.targets
index 367a5f3a58..eee603899d 100644
--- a/build/NuSpecs/MUXControls-Nuget-Common.targets
+++ b/build/NuSpecs/MUXControls-Nuget-Common.targets
@@ -17,4 +17,47 @@
Text="Microsoft.UI.Xaml nuget package requires TargetPlatformVersion >= 10.0.18362.0 (current project is $(MicrosoftUIXamlTargetPlatformCheckValue))"
Condition="$(MicrosoftUIXamlTargetPlatformCheckValue) < 18362" />
+
+
+
+ true
+ $(WinMetadataDir)\Microsoft.UI.Xaml.winmd
+ CustomOutputGroupForPackaging
+ $(ProjectName)
+ Microsoft.UI.Xaml.dll
+
+
+
+ Microsoft.UI.Xaml.winmd
+ Microsoft.UI.Xaml\DensityStyles\Compact.xbf
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Microsoft.UI.Xaml.winmd
+
+
+
\ No newline at end of file
diff --git a/build/NuSpecs/MUXControls-Nuget-FrameworkPackage.props b/build/NuSpecs/MUXControls-Nuget-FrameworkPackage.props
index f2228fedf6..c72b8702f6 100644
--- a/build/NuSpecs/MUXControls-Nuget-FrameworkPackage.props
+++ b/build/NuSpecs/MUXControls-Nuget-FrameworkPackage.props
@@ -40,37 +40,4 @@
-
-
-
- true
- $(WinMetadataDir)\Microsoft.UI.Xaml.winmd
- CustomOutputGroupForPackaging
- $(ProjectName)
-
-
-
- Microsoft.UI.Xaml.winmd
- Microsoft.UI.Xaml\DensityStyles\Compact.xbf
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/AppThatUsesMUXIndirectly.csproj b/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/AppThatUsesMUXIndirectly.csproj
index d7fcb77c20..fb03b9f947 100644
--- a/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/AppThatUsesMUXIndirectly.csproj
+++ b/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/AppThatUsesMUXIndirectly.csproj
@@ -138,6 +138,9 @@
1.0.67
+
+ 1.0.0
+
@@ -158,7 +161,7 @@
-->
-
+
\ No newline at end of file
diff --git a/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml b/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml
index c2fadc2f16..d337b1af23 100644
--- a/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml
+++ b/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml
@@ -9,6 +9,5 @@
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
-
diff --git a/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml.cs b/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml.cs
index b642b39676..2390dbb432 100644
--- a/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml.cs
+++ b/test/MUXControlsReleaseTest/AppThatUsesMUXIndirectly/MainPage.xaml.cs
@@ -17,13 +17,17 @@ namespace AppThatUsesMUXIndirectly
{
public sealed partial class MainPage : Page
{
- // This app does NOT directly consume MUX, but it references another library that does use MUX.
+ // This app does NOT directly consume MUX, but it references a library and a nupkg that use MUX.
public MainPage()
{
-
this.InitializeComponent();
+
var userControl = new LibraryThatUsesMUX.TestUserControl1();
layoutRoot.Children.Add(userControl);
+
+ var muxcInterfaceImplementation = new RuntimeComponentThatUsesMUX.MUXCInterfaceImplementation();
+ object dummy;
+ muxcInterfaceImplementation.TryCreateAnimatedVisual(null, out dummy);
}
}
}
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.cpp b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.cpp
new file mode 100644
index 0000000000..af5d5b3dd5
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.cpp
@@ -0,0 +1,22 @@
+#include "pch.h"
+#include "MUXCInterfaceImplementation.h"
+#if __has_include("MUXCInterfaceImplementation.g.cpp")
+#include "MUXCInterfaceImplementation.g.cpp"
+#endif
+
+using namespace winrt;
+using namespace Windows::UI::Xaml;
+
+namespace winrt::RuntimeComponentThatUsesMUX::implementation
+{
+ MUXCInterfaceImplementation::MUXCInterfaceImplementation()
+ {
+ }
+
+ winrt::Microsoft::UI::Xaml::Controls::IAnimatedVisual MUXCInterfaceImplementation::TryCreateAnimatedVisual(
+ winrt::Windows::UI::Composition::Compositor const&,
+ winrt::Windows::Foundation::IInspectable&)
+ {
+ return nullptr;
+ }
+}
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.h b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.h
new file mode 100644
index 0000000000..76f285ea27
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include "winrt/Windows.UI.Xaml.h"
+#include "winrt/Windows.UI.Xaml.Markup.h"
+#include "winrt/Windows.UI.Xaml.Controls.Primitives.h"
+#include "winrt/Microsoft.UI.Xaml.Controls.h"
+#include "MUXCInterfaceImplementation.g.h"
+
+namespace winrt::RuntimeComponentThatUsesMUX::implementation
+{
+ struct MUXCInterfaceImplementation : MUXCInterfaceImplementationT
+ {
+ MUXCInterfaceImplementation();
+
+ winrt::Microsoft::UI::Xaml::Controls::IAnimatedVisual TryCreateAnimatedVisual(
+ winrt::Windows::UI::Composition::Compositor const& compositor,
+ winrt::Windows::Foundation::IInspectable& diagnostics);
+ };
+}
+
+namespace winrt::RuntimeComponentThatUsesMUX::factory_implementation
+{
+ struct MUXCInterfaceImplementation : MUXCInterfaceImplementationT
+ {
+ };
+}
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.idl b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.idl
new file mode 100644
index 0000000000..a9671f5b80
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/MUXCInterfaceImplementation.idl
@@ -0,0 +1,8 @@
+namespace RuntimeComponentThatUsesMUX
+{
+ [default_interface]
+ runtimeclass MUXCInterfaceImplementation : Microsoft.UI.Xaml.Controls.IAnimatedVisualSource
+ {
+ MUXCInterfaceImplementation();
+ }
+}
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/PropertySheet.props b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/PropertySheet.props
new file mode 100644
index 0000000000..5942ba395b
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/PropertySheet.props
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.def b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.def
new file mode 100644
index 0000000000..24e7c1235c
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.def
@@ -0,0 +1,3 @@
+EXPORTS
+DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE
+DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.native.targets b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.native.targets
new file mode 100644
index 0000000000..2157e7aa12
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.native.targets
@@ -0,0 +1,14 @@
+
+
+
+ <_WinmdDir>$(MSBuildThisFileDirectory)..\..\lib\uap10.0\
+
+
+
+ false
+
+
+
+
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.nuspec b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.nuspec
new file mode 100644
index 0000000000..636b652b46
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.nuspec
@@ -0,0 +1,28 @@
+
+
+
+ RuntimeComponentThatUsesMUX
+ 1.0.0
+ RuntimeComponentThatUsesMUX
+ Microsoft
+ Microsoft
+ This package tests the functionality of having a NuGet package reference Microsoft.UI.Xaml.
+ © Microsoft Corporation. All rights reserved.
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.sln b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.sln
new file mode 100644
index 0000000000..53f594e9c7
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.sln
@@ -0,0 +1,43 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30803.129
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RuntimeComponentThatUsesMUX", "RuntimeComponentThatUsesMUX.vcxproj", "{267D7B40-556E-447B-A262-B59B300CC8F6}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|arm = Debug|arm
+ Debug|arm64 = Debug|arm64
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|arm = Release|arm
+ Release|arm64 = Release|arm64
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|arm.ActiveCfg = Debug|arm
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|arm.Build.0 = Debug|arm
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|arm64.ActiveCfg = Debug|arm64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|arm64.Build.0 = Debug|arm64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|x64.ActiveCfg = Debug|x64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|x64.Build.0 = Debug|x64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|x86.ActiveCfg = Debug|Win32
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Debug|x86.Build.0 = Debug|Win32
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|arm.ActiveCfg = Release|arm
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|arm.Build.0 = Release|arm
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|arm64.ActiveCfg = Release|arm64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|arm64.Build.0 = Release|arm64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|x64.ActiveCfg = Release|x64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|x64.Build.0 = Release|x64
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|x86.ActiveCfg = Release|Win32
+ {267D7B40-556E-447B-A262-B59B300CC8F6}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {E4731583-0CEA-4289-A2E3-75D1563D9671}
+ EndGlobalSection
+EndGlobal
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.targets b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.targets
new file mode 100644
index 0000000000..004f66f46c
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.targets
@@ -0,0 +1,16 @@
+
+
+
+ <_RuntimeIdentifier Condition="'$(Platform)' == 'Win32'">win10-x86
+ <_RuntimeIdentifier Condition="'$(Platform)' != 'Win32'">win10-$(Platform)
+ <_DllDir>$(MSBuildThisFileDirectory)..\runtimes\$(_WinUIRuntimeIdentifier)\native\
+
+
+
+
+
+
+
+
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj
new file mode 100644
index 0000000000..a2b3979d65
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj
@@ -0,0 +1,164 @@
+
+
+
+
+
+ true
+ true
+ true
+ {267d7b40-556e-447b-a262-b59b300cc8f6}
+ RuntimeComponentThatUsesMUX
+ RuntimeComponentThatUsesMUX
+ en-US
+ 16.0
+ true
+ Windows Store
+ 10.0
+ $(MuxSdkVersion)
+ 10.0.15063.0
+ false
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Debug
+ arm64
+
+
+ Debug
+ arm
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+ Release
+ arm64
+
+
+ Release
+ arm
+
+
+
+ DynamicLibrary
+ v142
+ Unicode
+ false
+
+
+ true
+ true
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Use
+ pch.h
+ $(IntDir)pch.pch
+ Level4
+ %(AdditionalOptions) /bigobj
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+
+
+ Console
+ true
+ RuntimeComponentThatUsesMUX.def
+
+
+
+
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+
+
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ true
+
+
+
+
+
+ MUXCInterfaceImplementation.idl
+ Code
+
+
+
+
+ Create
+
+
+
+ MUXCInterfaceImplementation.idl
+ Code
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
+
+
+ x86
+ $(Platform)
+
+
+
+
\ No newline at end of file
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj.filters b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj.filters
new file mode 100644
index 0000000000..33fc64a571
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX.vcxproj.filters
@@ -0,0 +1,35 @@
+
+
+
+
+ accd3aa8-1ba0-4223-9bbe-0c431709210b
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {926ab91d-31b4-48c3-b9a4-e681349f27f0}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX_TemporaryKey.pfx b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/RuntimeComponentThatUsesMUX_TemporaryKey.pfx
new file mode 100644
index 0000000000000000000000000000000000000000..6bca8f1fc3a5bd3b8fa9fbe3ac61b5c85c84b027
GIT binary patch
literal 2528
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
literal 0
HcmV?d00001
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/packages.config b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/packages.config
new file mode 100644
index 0000000000..e22227309d
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.cpp b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.cpp
new file mode 100644
index 0000000000..bcb5590be1
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.cpp
@@ -0,0 +1 @@
+#include "pch.h"
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.h b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.h
new file mode 100644
index 0000000000..c4942fa260
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/pch.h
@@ -0,0 +1,16 @@
+#pragma once
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
diff --git a/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/readme.txt b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/readme.txt
new file mode 100644
index 0000000000..61e004aeca
--- /dev/null
+++ b/test/MUXControlsReleaseTest/RuntimeComponentThatUsesMUX/readme.txt
@@ -0,0 +1,23 @@
+========================================================================
+ C++/WinRT RuntimeComponentThatUsesMUX Project Overview
+========================================================================
+
+This project demonstrates how to get started authoring Windows Runtime
+classes directly with standard C++, using the C++/WinRT SDK component
+to generate implementation headers from interface (IDL) files. The
+generated Windows Runtime component binary and WinMD files should then
+be bundled with the Universal Windows Platform (UWP) app consuming them.
+
+Steps:
+1. Create an interface (IDL) file to define your Windows Runtime class,
+ its default interface, and any other interfaces it implements.
+2. Build the project once to generate module.g.cpp, module.h.cpp, and
+ implementation templates under the "Generated Files" folder, as
+ well as skeleton class definitions under "Generated Files\sources".
+3. Use the skeleton class definitions for reference to implement your
+ Windows Runtime classes.
+
+========================================================================
+Learn more about C++/WinRT here:
+http://aka.ms/cppwinrt/
+========================================================================