diff --git a/.vsts-ci.yml b/.vsts-ci.yml
index 15c5730566b9..1ae882ec8229 100644
--- a/.vsts-ci.yml
+++ b/.vsts-ci.yml
@@ -56,6 +56,20 @@ jobs:
_SignType: test
_DotNetPublishToBlobFeed: false
+- ${{ if ne(variables['System.TeamProject'], 'public') }}:
+ - template: /eng/build.yml
+ parameters:
+ agentOs: Windows_Perf_Helix_Fullframework
+ pool:
+ name: Hosted VS2017
+ strategy:
+ matrix:
+ Build_Release:
+ _BuildConfig: Release
+ _PublishType: none
+ _SignType: test
+ _DotNetPublishToBlobFeed: false
+
- template: /eng/build.yml
parameters:
agentOs: Linux_Perf_Helix
@@ -165,6 +179,19 @@ jobs:
_PublishType: none
_SignType: test
+ - template: /eng/build.yml
+ parameters:
+ agentOs: Windows_Perf_CI_FullFramework
+ pool:
+ name: NetCorePublic-Pool
+ queue: buildpool.windows.10.amd64.vs2017.open
+ strategy:
+ matrix:
+ Build_Release:
+ _BuildConfig: Release
+ _PublishType: none
+ _SignType: test
+
- template: /eng/build.yml
parameters:
agentOs: Linux_Perf_CI
diff --git a/build/RunPerfTestsOnHelix.cmd b/build/RunPerfTestsOnHelix.cmd
index 60afd1c7fc78..c60a3606a2a1 100644
--- a/build/RunPerfTestsOnHelix.cmd
+++ b/build/RunPerfTestsOnHelix.cmd
@@ -1,7 +1,7 @@
@echo on
setlocal EnableDelayedExpansion
- if "%BV_UPLOAD_SAS_TOKEN%" == "" (
+if "%BV_UPLOAD_SAS_TOKEN%" == "" (
echo EnvVar BV_UPLOAD_SAS_TOKEN should be set; exiting...
exit /b 1)
if "%HELIX_CORRELATION_PAYLOAD%" == "" (
@@ -13,6 +13,7 @@ set PerfIterations=%2
set GIT_COMMIT=%3
set GIT_BRANCH=%4
set runType=%5
+set TestFullMSBuild=%6
REM Since dotnet.exe was locked; we exclude it from the helix-payload.
REM Run a restore to re-install the SDK.
@@ -25,15 +26,24 @@ echo "Building:'Microsoft.NET.PerformanceTests.dll'"
%HELIX_CORRELATION_PAYLOAD%\.dotnet\dotnet.exe msbuild %HELIX_CORRELATION_PAYLOAD%\src\Tests\Microsoft.NET.PerformanceTests\Microsoft.NET.PerformanceTests.csproj /t:build /p:configuration=%configuration% /p:NUGET_PACKAGES=%HELIX_CORRELATION_PAYLOAD%\.packages
REM Run the performance tests and collect performance data.
+REM -restore is required to make TestFullMSBuild to take effect
echo "Running the performance tests and collecting data"
-powershell -NoLogo -NoProfile -ExecutionPolicy ByPass -Command "& """%HELIX_CORRELATION_PAYLOAD%\eng\common\build.ps1""" -configuration %configuration% -ci -msbuildEngine dotnet -performanceTest /p:PerfIterations=%PerfIterations%"
+SETLOCAL
+if "%TestFullMSBuild%"=="true" (
+ set _MsbuildEngineArg=
+) else (
+ set _MsbuildEngineArg=-msbuildEngine dotnet
+)
+Set _Commission=30
+powershell -NoLogo -NoProfile -ExecutionPolicy ByPass -Command "& """%HELIX_CORRELATION_PAYLOAD%\eng\common\build.ps1""" -restore -configuration %configuration% -ci %_MsbuildEngineArg% -performanceTest /p:PerfIterations=%PerfIterations%"
IF %ERRORLEVEL% GTR 0 exit %ERRORLEVEL%
+ENDLOCAL
echo "Performance tests completed"
REM Upload the performance data to BenchView.
set perfWorkingDirectory=%HELIX_CORRELATION_PAYLOAD%\artifacts\TestResults\%configuration%\Performance
set architecture=%PROCESSOR_ARCHITECTURE%
-if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (set architecture=x64)
+if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (set architecture=x64)
echo "Uploading data to Benchview: uploadperftobenchview.cmd"
pushd %HELIX_CORRELATION_PAYLOAD%
diff --git a/build/uploadperftobenchview.cmd b/build/uploadperftobenchview.cmd
index 415a0f7fa8d0..ae0e059d605c 100644
--- a/build/uploadperftobenchview.cmd
+++ b/build/uploadperftobenchview.cmd
@@ -16,6 +16,9 @@ if "%architecture%" == "" (
if "%OS%" == "" (
echo EnvVar OS should be set; exiting...
exit /b 1)
+if "%TestFullMSBuild%" == "" (
+ set TestFullMSBuild=false
+ )
if /I not "%runType%" == "private" if /I not "%runType%" == "rolling" (
echo EnvVar runType should be set; exiting...
exit /b 1)
@@ -46,7 +49,7 @@ if "%GIT_BRANCH:~0,7%" == "origin/" (set GIT_BRANCH_WITHOUT_ORIGIN=%GIT_BRANCH:o
for /f %%x in ('powershell -NoProfile -NoLogo -Command "Get-Date -Date (Get-Date).ToUniversalTime() -UFormat '%%Y-%%m-%%dT%%H:%%M:%%SZ'"') do (set timeStamp=%%x)
-set benchViewName=SDK perf %OS% %architecture% %configuration% %runType% %GIT_BRANCH_WITHOUT_ORIGIN%
+set benchViewName=SDK perf %OS% %architecture% %configuration% TestFullMSBuild-%TestFullMSBuild% %runType% %GIT_BRANCH_WITHOUT_ORIGIN%
if /I "%runType%" == "private" (set benchViewName=%benchViewName% %BenchviewCommitName%)
if /I "%runType%" == "rolling" (set benchViewName=%benchViewName% %GIT_COMMIT%)
echo BenchViewName: "%benchViewName%"
@@ -77,6 +80,7 @@ echo Creating: "%perfWorkingDirectory%\submission.json"
--type "%runType%" ^
--config-name "%configuration%" ^
--config Configuration "%configuration%" ^
+ --config TestFullMSBuild "%TestFullMSBuild%" ^
--config OS "%OS%" ^
--architecture "%architecture%" ^
--machinepool "perfsnake" ^
diff --git a/eng/build.yml b/eng/build.yml
index 5ea0fd85ba98..d9a9d001d180 100644
--- a/eng/build.yml
+++ b/eng/build.yml
@@ -97,6 +97,16 @@ jobs:
env:
BuildConfig: $(_BuildConfig)
+ - ${{ if eq(parameters.agentOs, 'Windows_Perf_CI_FullFramework') }}:
+ - script: build.cmd
+ -configuration $(_BuildConfig)
+ -ci
+ -performanceTest
+ displayName: Build
+ env:
+ BuildConfig: $(_BuildConfig)
+ TestFullMSBuild: 'true'
+
- ${{ if eq(parameters.agentOs, 'Linux_Perf_CI') }}:
- script: ./build.sh
--configuration $(_BuildConfig)
@@ -122,8 +132,38 @@ jobs:
WorkItemTimeout: 2:00
WorkItemDirectory: '$(Build.SourcesDirectory)\build'
- WorkItemCommand: '%HELIX_CORRELATION_PAYLOAD%\build\RunPerfTestsOnHelix.cmd $(_BuildConfig) $(_PerfIterations) $(Build.SourceVersion) $(Build.SourceBranchName) rolling'
+ WorkItemCommand: '%HELIX_CORRELATION_PAYLOAD%\build\RunPerfTestsOnHelix.cmd $(_BuildConfig) $(_PerfIterations) $(Build.SourceVersion) $(Build.SourceBranchName) rolling false'
+ CorrelationPayloadDirectory: '$(Build.SourcesDirectory)\helix-package'
+ HelixConfiguration: 'CoreMSBuild'
+ - task: PublishBuildArtifacts@1
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)\artifacts\log
+ artifactName: logs
+
+ - ${{ if eq(parameters.agentOs, 'Windows_Perf_Helix_Fullframework') }}:
+ - checkout: self
+ clean: true
+ - script: $(Build.SourcesDirectory)\build.cmd -configuration $(_BuildConfig) -ci
+ displayName: Pre-Build
+ - script: (robocopy $(Build.SourcesDirectory) $(Build.SourcesDirectory)\helix-package /NP /E /XD $(Build.SourcesDirectory)\helix-package $(Build.SourcesDirectory)\.dotnet $(Build.SourcesDirectory)\artifacts\bin\Tests $(Build.SourcesDirectory)\artifacts\obj\$(_BuildConfig)\Sdks\Microsoft.NET.Build.Extensions $(Build.SourcesDirectory)\artifacts\bin\$(_BuildConfig)\Sdks\Microsoft.NET.Build.Extensions) ^& IF %ERRORLEVEL% LEQ 1 exit 0
+ displayName: Selection of sources
+ - template: /eng/common/templates/steps/send-to-helix.yml
+ parameters:
+ HelixSource: 'pr/dotnet/sdk/$(Build.SourceBranch)'
+ HelixType: 'test/sdk_$(_BuildConfig)/'
+ HelixAccessToken: $(HelixApiAccessToken)
+ HelixTargetQueues: 'Windows.10.Amd64.ClientRS1.Perf' # using a dedicated private Helix queue (perfsnakes)
+ HelixPreCommands: 'set "BV_UPLOAD_SAS_TOKEN=$(BenchViewUploadToken)"'
+
+ WorkItemTimeout: 2:00
+ WorkItemDirectory: '$(Build.SourcesDirectory)\build'
+ WorkItemCommand: '%HELIX_CORRELATION_PAYLOAD%\build\RunPerfTestsOnHelix.cmd $(_BuildConfig) $(_PerfIterations) $(Build.SourceVersion) $(Build.SourceBranchName) rolling true'
CorrelationPayloadDirectory: '$(Build.SourcesDirectory)\helix-package'
+ HelixConfiguration: 'FullMSBuild'
+ - task: PublishBuildArtifacts@1
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)\artifacts\log
+ artifactName: logs
- ${{ if eq(parameters.agentOs, 'Linux_Perf_Helix') }}:
- checkout: self
@@ -140,7 +180,7 @@ jobs:
WorkItemDirectory: '$(Build.SourcesDirectory)'
WorkItemCommand: './build/RunPerfTestsOnHelix.sh $(_BuildConfig) $(_PerfIterations) $(Build.SourceVersion) $(Build.SourceBranchName) rolling x64 Ubuntu_16.04'
- - ${{ if notIn(parameters.agentOs, 'Windows_NT', 'Windows_NT_FullFramework', 'Windows_NT_TestAsTools', 'Windows_Perf_CI', 'Linux_Perf_CI', 'Windows_Perf_Helix', 'Linux_Perf_Helix') }}:
+ - ${{ if notIn(parameters.agentOs, 'Windows_NT', 'Windows_NT_FullFramework', 'Windows_NT_TestAsTools', 'Windows_Perf_CI', 'Linux_Perf_CI', 'Windows_Perf_Helix', 'Windows_Perf_CI_FullFramework', 'Windows_Perf_Helix_Fullframework', 'Linux_Perf_Helix') }}:
- script: eng/common/cibuild.sh
--configuration $(_BuildConfig)
$(_PublishArgs)
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/App.config b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/App.config
new file mode 100644
index 000000000000..56efbc7b5f15
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Form1.Designer.cs b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Form1.Designer.cs
new file mode 100644
index 000000000000..0e2d0ebc1489
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Form1.Designer.cs
@@ -0,0 +1,40 @@
+namespace WindowsFormsHelloWorldFullFramework
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Text = "Form1";
+ }
+
+ #endregion
+ }
+}
+
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Form1.cs b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Form1.cs
new file mode 100644
index 000000000000..667712c56267
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Form1.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace WindowsFormsHelloWorldFullFramework
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Program.cs b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Program.cs
new file mode 100644
index 000000000000..fcbe8b646ada
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace WindowsFormsHelloWorldFullFramework
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/AssemblyInfo.cs b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000000..4b35e2365fe6
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("WindowsFormsHelloWorldFullFramework")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WindowsFormsHelloWorldFullFramework")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6ecd7363-c3d0-4bd4-a9d2-85e46f2e9103")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Resources.Designer.cs b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Resources.Designer.cs
new file mode 100644
index 000000000000..5f4a7465cab3
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WindowsFormsHelloWorldFullFramework.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsFormsHelloWorldFullFramework.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Resources.resx b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Resources.resx
new file mode 100644
index 000000000000..af7dbebbacef
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Settings.Designer.cs b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Settings.Designer.cs
new file mode 100644
index 000000000000..b960e402c812
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WindowsFormsHelloWorldFullFramework.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Settings.settings b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Settings.settings
new file mode 100644
index 000000000000..39645652af62
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/WindowsFormsHelloWorldFullFramework.csproj b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/WindowsFormsHelloWorldFullFramework.csproj
new file mode 100644
index 000000000000..3bce3cd255a8
--- /dev/null
+++ b/src/Assets/TestProjects/WindowsFormsHelloWorldFullFramework/WindowsFormsHelloWorldFullFramework.csproj
@@ -0,0 +1,80 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {6ECD7363-C3D0-4BD4-A9D2-85E46F2E9103}
+ WinExe
+ WindowsFormsHelloWorldFullFramework
+ WindowsFormsHelloWorldFullFramework
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.config b/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.config
new file mode 100644
index 000000000000..56efbc7b5f15
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.xaml b/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.xaml
new file mode 100644
index 000000000000..7f2ba0cf19cf
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.xaml.cs b/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.xaml.cs
new file mode 100644
index 000000000000..78ed27b7eb84
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace WpfHelloWorldFullFramework
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/MainWindow.xaml b/src/Assets/TestProjects/WpfHelloWorldFullFramework/MainWindow.xaml
new file mode 100644
index 000000000000..a2082a060ed2
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/MainWindow.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/MainWindow.xaml.cs b/src/Assets/TestProjects/WpfHelloWorldFullFramework/MainWindow.xaml.cs
new file mode 100644
index 000000000000..f7cb905ce25b
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/MainWindow.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace WpfHelloWorldFullFramework
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/AssemblyInfo.cs b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000000..1f41ea5492ec
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("WpfHelloWorldFullFramework")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WpfHelloWorldFullFramework")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Resources.Designer.cs b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Resources.Designer.cs
new file mode 100644
index 000000000000..c00b71ba5b18
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WpfHelloWorldFullFramework.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WpfHelloWorldFullFramework.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Resources.resx b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Resources.resx
new file mode 100644
index 000000000000..af7dbebbacef
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Settings.Designer.cs b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Settings.Designer.cs
new file mode 100644
index 000000000000..4288283f1849
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WpfHelloWorldFullFramework.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Settings.settings b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Settings.settings
new file mode 100644
index 000000000000..033d7a5e9e22
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Assets/TestProjects/WpfHelloWorldFullFramework/WpfHelloWorldFullFramework.csproj b/src/Assets/TestProjects/WpfHelloWorldFullFramework/WpfHelloWorldFullFramework.csproj
new file mode 100644
index 000000000000..45becbe1957a
--- /dev/null
+++ b/src/Assets/TestProjects/WpfHelloWorldFullFramework/WpfHelloWorldFullFramework.csproj
@@ -0,0 +1,98 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {EB6EB005-CF8F-4A72-BDE8-D1F2AE757D2B}
+ WinExe
+ WpfHelloWorldFullFramework
+ WpfHelloWorldFullFramework
+ v4.7.2
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Tests/Microsoft.NET.PerformanceTests/BuildPerf.cs b/src/Tests/Microsoft.NET.PerformanceTests/BuildPerf.cs
index bee7ecd0bd1a..6fc96b380850 100644
--- a/src/Tests/Microsoft.NET.PerformanceTests/BuildPerf.cs
+++ b/src/Tests/Microsoft.NET.PerformanceTests/BuildPerf.cs
@@ -172,6 +172,64 @@ public void BuildRoslynCompilers(ProjectPerfOperation operation)
TestProject(Path.Combine(testDir.Path, "Compilers.sln"), "Roslyn", operation);
}
+ [WindowsOnlyTheory]
+ [InlineData(ProjectPerfOperation.CleanBuild)]
+ [InlineData(ProjectPerfOperation.BuildWithNoChanges)]
+ public void BuildNetCoreWPFHelloWorld(ProjectPerfOperation operation)
+ {
+ var testDir = _testAssetsManager.CreateTestDirectory(identifier: operation.ToString());
+
+ NuGetConfigWriter.Write(testDir.Path, NuGetConfigWriter.DotnetCoreBlobFeed);
+
+ var newCommand = new DotnetCommand(Log);
+ newCommand.WorkingDirectory = testDir.Path;
+
+ newCommand.Execute("new", "wpf", "--no-restore").Should().Pass();
+
+ TestProject(testDir.Path, "WPF hello world", operation);
+ }
+
+ [FullMSBuildOnlyTheory]
+ [InlineData(ProjectPerfOperation.CleanBuild)]
+ [InlineData(ProjectPerfOperation.BuildWithNoChanges)]
+ public void BuildNetFullFrameworkWPFHelloWorld(ProjectPerfOperation operation)
+ {
+ var testAsset = _testAssetsManager
+ .CopyTestAsset("WpfHelloWorldFullFramework", identifier: operation.ToString())
+ .WithSource();
+
+ TestProject(testAsset.Path, "Full framework WPF hello world", operation);
+ }
+
+ [WindowsOnlyTheory]
+ [InlineData(ProjectPerfOperation.CleanBuild)]
+ [InlineData(ProjectPerfOperation.BuildWithNoChanges)]
+ public void BuildNetCoreWindowsFormsHelloWorld(ProjectPerfOperation operation)
+ {
+ var testDir = _testAssetsManager.CreateTestDirectory(identifier: operation.ToString());
+
+ NuGetConfigWriter.Write(testDir.Path, NuGetConfigWriter.DotnetCoreBlobFeed);
+
+ var newCommand = new DotnetCommand(Log);
+ newCommand.WorkingDirectory = testDir.Path;
+
+ newCommand.Execute("new", "winforms", "--no-restore").Should().Pass();
+
+ TestProject(testDir.Path, "Windows Forms hello world", operation);
+ }
+
+ [FullMSBuildOnlyTheory]
+ [InlineData(ProjectPerfOperation.CleanBuild)]
+ [InlineData(ProjectPerfOperation.BuildWithNoChanges)]
+ public void BuildNetFullFrameworkWindowsFormsHelloWorld(ProjectPerfOperation operation)
+ {
+ var testAsset = _testAssetsManager
+ .CopyTestAsset("WindowsFormsHelloWorldFullFramework", identifier: operation.ToString())
+ .WithSource();
+
+ TestProject(testAsset.Path, "Full Windows Forms hello world", operation);
+ }
+
public enum ProjectPerfOperation
{
CleanBuild,