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,