From 3e01b4e346a17ba9d65ca92d68fc0cbede05be42 Mon Sep 17 00:00:00 2001 From: Mike Barnett Date: Wed, 27 Jul 2011 17:54:54 -0700 Subject: New project to support "Get Me Here": an assertion injector that puts into a binary a call to "Contract.Assert(false)". --- BCT/BCT.sln | 414 ++++++++++++++ .../AssertionInjector/AssertionInjector.csproj | 99 ++++ BCT/GetMeHere/AssertionInjector/Program.cs | 596 +++++++++++++++++++++ .../AssertionInjector/Properties/AssemblyInfo.cs | 36 ++ 4 files changed, 1145 insertions(+) create mode 100644 BCT/GetMeHere/AssertionInjector/AssertionInjector.csproj create mode 100644 BCT/GetMeHere/AssertionInjector/Program.cs create mode 100644 BCT/GetMeHere/AssertionInjector/Properties/AssemblyInfo.cs diff --git a/BCT/BCT.sln b/BCT/BCT.sln index 308706e2..d3151d97 100644 --- a/BCT/BCT.sln +++ b/BCT/BCT.sln @@ -44,223 +44,637 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Contracts", "..\. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranslationPlugins", "TranslationPlugins\TranslationPlugins.csproj", "{8C242D42-9714-440F-884D-F64F09E78C7B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssertionInjector", "GetMeHere\AssertionInjector\AssertionInjector.csproj", "{F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PeWriter", "..\..\CCICodePlex\Ast\Metadata\Sources\PeWriter\PeWriter.csproj", "{304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PdbWriter", "..\..\CCICodePlex\Ast\Metadata\Sources\PdbWriter\PdbWriter.csproj", "{6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = BCT.vsmdi EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution CompilerOnly|Any CPU = CompilerOnly|Any CPU + CompilerOnly|Mixed Platforms = CompilerOnly|Mixed Platforms + CompilerOnly|x86 = CompilerOnly|x86 Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 FastpathSim|Any CPU = FastpathSim|Any CPU + FastpathSim|Mixed Platforms = FastpathSim|Mixed Platforms + FastpathSim|x86 = FastpathSim|x86 NightlyDebug|Any CPU = NightlyDebug|Any CPU + NightlyDebug|Mixed Platforms = NightlyDebug|Mixed Platforms + NightlyDebug|x86 = NightlyDebug|x86 NightlyRelease|Any CPU = NightlyRelease|Any CPU + NightlyRelease|Mixed Platforms = NightlyRelease|Mixed Platforms + NightlyRelease|x86 = NightlyRelease|x86 Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9C8E4D74-0251-479D-ADAC-A9A469977301}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.Debug|x86.ActiveCfg = Debug|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.FastpathSim|x86.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C8E4D74-0251-479D-ADAC-A9A469977301}.Release|Any CPU.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9C8E4D74-0251-479D-ADAC-A9A469977301}.Release|x86.ActiveCfg = Release|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Debug|x86.ActiveCfg = Debug|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyDebug|Any CPU.ActiveCfg = NightlyDebug|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyDebug|Any CPU.Build.0 = NightlyDebug|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyDebug|Mixed Platforms.ActiveCfg = NightlyDebug|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyDebug|Mixed Platforms.Build.0 = NightlyDebug|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyDebug|x86.ActiveCfg = NightlyDebug|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyRelease|Any CPU.ActiveCfg = NightlyRelease|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyRelease|Any CPU.Build.0 = NightlyRelease|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyRelease|Mixed Platforms.ActiveCfg = NightlyRelease|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyRelease|Mixed Platforms.Build.0 = NightlyRelease|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.NightlyRelease|x86.ActiveCfg = NightlyRelease|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Release|Any CPU.ActiveCfg = Release|Any CPU {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Release|Any CPU.Build.0 = Release|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {33CAB640-0D03-43DF-81BD-22CDC6C0A597}.Release|x86.ActiveCfg = Release|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Debug|x86.ActiveCfg = Debug|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyDebug|Any CPU.ActiveCfg = NightlyDebug|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyDebug|Any CPU.Build.0 = NightlyDebug|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyDebug|Mixed Platforms.ActiveCfg = NightlyDebug|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyDebug|Mixed Platforms.Build.0 = NightlyDebug|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyDebug|x86.ActiveCfg = NightlyDebug|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyRelease|Any CPU.ActiveCfg = NightlyRelease|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyRelease|Any CPU.Build.0 = NightlyRelease|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyRelease|Mixed Platforms.ActiveCfg = NightlyRelease|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyRelease|Mixed Platforms.Build.0 = NightlyRelease|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.NightlyRelease|x86.ActiveCfg = NightlyRelease|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Release|Any CPU.Build.0 = Release|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F}.Release|x86.ActiveCfg = Release|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Debug|x86.ActiveCfg = Debug|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyDebug|Any CPU.ActiveCfg = NightlyDebug|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyDebug|Any CPU.Build.0 = NightlyDebug|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyDebug|Mixed Platforms.ActiveCfg = NightlyDebug|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyDebug|Mixed Platforms.Build.0 = NightlyDebug|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyDebug|x86.ActiveCfg = NightlyDebug|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyRelease|Any CPU.ActiveCfg = NightlyRelease|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyRelease|Any CPU.Build.0 = NightlyRelease|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyRelease|Mixed Platforms.ActiveCfg = NightlyRelease|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyRelease|Mixed Platforms.Build.0 = NightlyRelease|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.NightlyRelease|x86.ActiveCfg = NightlyRelease|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Release|Any CPU.ActiveCfg = Release|Any CPU {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Release|Any CPU.Build.0 = Release|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {319E151C-8F33-49E7-81C9-30F02F9BA90A}.Release|x86.ActiveCfg = Release|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Debug|x86.ActiveCfg = Debug|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Release|Any CPU.Build.0 = Release|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5}.Release|x86.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Debug|x86.ActiveCfg = Debug|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.FastpathSim|x86.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Release|Any CPU.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A}.Release|x86.ActiveCfg = Release|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.Debug|x86.ActiveCfg = Debug|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B0054FD-124A-4037-9965-BDB55E6BF389}.Release|Any CPU.Build.0 = Release|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4B0054FD-124A-4037-9965-BDB55E6BF389}.Release|x86.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Debug|x86.ActiveCfg = Debug|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.FastpathSim|x86.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Release|Any CPU.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {27F2A417-B6ED-43AD-A38E-A0B6142216F6}.Release|x86.ActiveCfg = Release|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Debug|x86.ActiveCfg = Debug|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Release|Any CPU.ActiveCfg = Release|Any CPU {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Release|Any CPU.Build.0 = Release|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2}.Release|x86.ActiveCfg = Release|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Debug|x86.ActiveCfg = Debug|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyDebug|Any CPU.ActiveCfg = NightlyDebug|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyDebug|Any CPU.Build.0 = NightlyDebug|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyDebug|Mixed Platforms.ActiveCfg = NightlyDebug|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyDebug|Mixed Platforms.Build.0 = NightlyDebug|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyDebug|x86.ActiveCfg = NightlyDebug|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyRelease|Any CPU.ActiveCfg = NightlyRelease|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyRelease|Any CPU.Build.0 = NightlyRelease|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyRelease|Mixed Platforms.ActiveCfg = NightlyRelease|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyRelease|Mixed Platforms.Build.0 = NightlyRelease|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.NightlyRelease|x86.ActiveCfg = NightlyRelease|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Release|Any CPU.ActiveCfg = Release|Any CPU {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Release|Any CPU.Build.0 = Release|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {319E150C-8F33-49E7-81CA-30F02F9BA90A}.Release|x86.ActiveCfg = Release|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Debug|x86.ActiveCfg = Debug|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Release|Any CPU.ActiveCfg = Release|Any CPU {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Release|Any CPU.Build.0 = Release|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CEB76EA1-A168-49B0-A410-2C4195FEE86F}.Release|x86.ActiveCfg = Release|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.CompilerOnly|Any CPU.ActiveCfg = CompilerOnly|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.CompilerOnly|Any CPU.Build.0 = CompilerOnly|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.CompilerOnly|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.CompilerOnly|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.CompilerOnly|x86.ActiveCfg = CompilerOnly|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.Debug|x86.ActiveCfg = Debug|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.FastpathSim|Any CPU.ActiveCfg = CompilerOnly|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.FastpathSim|Any CPU.Build.0 = CompilerOnly|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.FastpathSim|Mixed Platforms.ActiveCfg = CompilerOnly|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.FastpathSim|Mixed Platforms.Build.0 = CompilerOnly|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.FastpathSim|x86.ActiveCfg = CompilerOnly|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.Release|Any CPU.ActiveCfg = Release|Any CPU {08156C78-403A-4112-AD81-8646AC51CD2F}.Release|Any CPU.Build.0 = Release|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {08156C78-403A-4112-AD81-8646AC51CD2F}.Release|x86.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Debug|x86.ActiveCfg = Debug|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.FastpathSim|x86.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Release|Any CPU.ActiveCfg = Release|Any CPU {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Release|Any CPU.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {3D13D2CC-6387-46FA-BDC2-4BEEFC460118}.Release|x86.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Debug|x86.ActiveCfg = Debug|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.FastpathSim|x86.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Release|Any CPU.ActiveCfg = Release|Any CPU {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Release|Any CPU.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A112AFBA-D6F6-44A4-A683-C3D458A68D84}.Release|x86.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Debug|x86.ActiveCfg = Debug|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.FastpathSim|x86.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Release|Any CPU.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {0703D916-A881-45E6-A5CD-6BC50E2E30E2}.Release|x86.ActiveCfg = Release|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.CompilerOnly|Any CPU.ActiveCfg = FastpathSim|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.CompilerOnly|Any CPU.Build.0 = FastpathSim|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.CompilerOnly|Mixed Platforms.ActiveCfg = FastpathSim|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.CompilerOnly|Mixed Platforms.Build.0 = FastpathSim|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.CompilerOnly|x86.ActiveCfg = FastpathSim|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Debug|x86.ActiveCfg = Debug|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.FastpathSim|Any CPU.ActiveCfg = FastpathSim|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.FastpathSim|Any CPU.Build.0 = FastpathSim|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.FastpathSim|Mixed Platforms.ActiveCfg = FastpathSim|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.FastpathSim|Mixed Platforms.Build.0 = FastpathSim|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.FastpathSim|x86.ActiveCfg = FastpathSim|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Release|Any CPU.Build.0 = Release|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B114E5FF-F2A2-4BE7-8AF1-936FC87030F0}.Release|x86.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.CompilerOnly|x86.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.Debug|x86.ActiveCfg = Debug|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.FastpathSim|x86.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.NightlyRelease|x86.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.Release|Any CPU.ActiveCfg = Release|Any CPU {8C242D42-9714-440F-884D-F64F09E78C7B}.Release|Any CPU.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8C242D42-9714-440F-884D-F64F09E78C7B}.Release|x86.ActiveCfg = Release|Any CPU + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.CompilerOnly|Any CPU.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.CompilerOnly|Mixed Platforms.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.CompilerOnly|x86.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.CompilerOnly|x86.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Debug|x86.ActiveCfg = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Debug|x86.Build.0 = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.FastpathSim|Any CPU.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.FastpathSim|Mixed Platforms.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.FastpathSim|Mixed Platforms.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.FastpathSim|x86.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.FastpathSim|x86.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyDebug|Any CPU.ActiveCfg = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyDebug|Mixed Platforms.Build.0 = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyDebug|x86.ActiveCfg = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyDebug|x86.Build.0 = Debug|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyRelease|Any CPU.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyRelease|Mixed Platforms.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyRelease|x86.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.NightlyRelease|x86.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Release|Any CPU.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Release|Mixed Platforms.Build.0 = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Release|x86.ActiveCfg = Release|x86 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99}.Release|x86.Build.0 = Release|x86 + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.CompilerOnly|x86.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Debug|x86.ActiveCfg = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.FastpathSim|x86.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.NightlyRelease|x86.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Release|Any CPU.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C}.Release|x86.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.CompilerOnly|Any CPU.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.CompilerOnly|Any CPU.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.CompilerOnly|Mixed Platforms.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.CompilerOnly|Mixed Platforms.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.CompilerOnly|x86.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Debug|x86.ActiveCfg = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.FastpathSim|Any CPU.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.FastpathSim|Any CPU.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.FastpathSim|Mixed Platforms.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.FastpathSim|Mixed Platforms.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.FastpathSim|x86.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyDebug|Any CPU.ActiveCfg = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyDebug|Any CPU.Build.0 = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyDebug|x86.ActiveCfg = Debug|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyRelease|Any CPU.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyRelease|Any CPU.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyRelease|Mixed Platforms.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyRelease|Mixed Platforms.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.NightlyRelease|x86.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Release|Any CPU.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/BCT/GetMeHere/AssertionInjector/AssertionInjector.csproj b/BCT/GetMeHere/AssertionInjector/AssertionInjector.csproj new file mode 100644 index 00000000..628bec7c --- /dev/null +++ b/BCT/GetMeHere/AssertionInjector/AssertionInjector.csproj @@ -0,0 +1,99 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {F55B9215-F618-4DCD-AD4C-2DB72CAE5A99} + Exe + Properties + AssertionInjector + AssertionInjector + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + {08156C78-403A-4112-AD81-8646AC51CD2F} + ILGenerator + + + {4A34A3C5-6176-49D7-A4C5-B2B671247F8F} + MetadataHelper + + + {33CAB640-0D03-43DF-81BD-22CDC6C0A597} + MetadataModel + + + {319E151C-8F33-49E7-81C9-30F02F9BA90A} + MutableMetadataModel + + + {A6A31B03-7C3D-4DE6-AA73-BE88116BC40A} + PdbReader + + + {6D83F687-ABB5-40B3-915E-CA53DA0EB7F3} + PdbWriter + + + {34B9A0CE-DF18-4CBC-8F7A-90C2B74338D5} + PeReader + + + {304A8B0B-851B-4AA6-A17D-5F87F39C5E5C} + PeWriter + + + {4B0054FD-124A-4037-9965-BDB55E6BF389} + SourceModel + + + {035FEA7F-0D36-4AE4-B694-EC45191B9AF2} + CodeModel + + + + + \ No newline at end of file diff --git a/BCT/GetMeHere/AssertionInjector/Program.cs b/BCT/GetMeHere/AssertionInjector/Program.cs new file mode 100644 index 00000000..f5d4262c --- /dev/null +++ b/BCT/GetMeHere/AssertionInjector/Program.cs @@ -0,0 +1,596 @@ +//----------------------------------------------------------------------------- +// +// Copyright (c) Microsoft. All rights reserved. +// This code is licensed under the Microsoft Public License. +// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY +// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR +// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. +// +//----------------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization; // needed for defining exception .ctors +using Microsoft.Cci; +using Microsoft.Cci.MutableCodeModel; + +namespace AssertionInjector { + + class Program { + readonly static int errorValue = -1; + static int Main(string[] args) { + if (args == null || args.Length < 4) { + Console.WriteLine("Usage: AssertionInjector []"); + return errorValue; + } + + var fileName = args[1]; + + int lineNumber; + if (!Int32.TryParse(args[2], out lineNumber)) { + Console.WriteLine("Error: couldn't parse '{0}' as an integer to use as a line number", args[2]); + return errorValue; + } + int columnNumber; + if (!Int32.TryParse(args[3], out columnNumber)) { + Console.WriteLine("Error: couldn't parse '{0}' as an integer to use as a column number", args[3]); + return errorValue; + } + + using (var host = new PeReader.DefaultHost()) { + IModule/*?*/ module = host.LoadUnitFrom(args[0]) as IModule; + if (module == null || module == Dummy.Module || module == Dummy.Assembly) { + Console.WriteLine(args[0] + " is not a PE file containing a CLR assembly, or an error occurred when loading it."); + return errorValue; + } + module = new MetadataDeepCopier(host).Copy(module); + + var pdbFile = Path.ChangeExtension(module.Location, "pdb"); + if (!File.Exists(pdbFile)) { + Console.WriteLine("Could not load the PDB file for '" + module.Name.Value + "' . Exiting."); + return errorValue; + } + using (var pdbStream = File.OpenRead(pdbFile)) { + if (pdbStream == null) { + Console.WriteLine("Could not load the PDB file for '" + module.Name.Value + "' . Exiting."); + return errorValue; + } + using (var pdbReader = new PdbReader(pdbStream, host)) { + var localScopeProvider = new ILGenerator.LocalScopeProvider(pdbReader); + var mutator = new ILMutator(host, pdbReader, fileName, lineNumber, columnNumber); + module = mutator.Rewrite(module); + + var outputPath = (args.Length == 2) ? args[1] : module.Location + ".pe"; + + var outputFileName = Path.GetFileNameWithoutExtension(outputPath); + + using (var pdbWriter = new PdbWriter(outputFileName + ".pdb", pdbReader)) { + PeWriter.WritePeToStream(module, host, File.Create(outputPath), pdbReader, localScopeProvider, pdbWriter); + } + } + } + return 0; // success + } + } + } + + /// + /// A mutator that modifies method bodies at the IL level. + /// It injects a call to Console.WriteLine for each store + /// to a local for which the PDB reader is able to provide a name. + /// This is meant to distinguish programmer-defined locals from + /// those introduced by the compiler. + /// + public class ILMutator : MetadataRewriter { + + PdbReader pdbReader; + IMethodReference contractDotAssert; + string fileName; + int lineNumber; + int columnNumber; + + public ILMutator(IMetadataHost host, PdbReader pdbReader, string fileName, int lineNumber, int columnNumber) + : base(host) { + this.pdbReader = pdbReader; + this.fileName = fileName; + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + + #region Get reference to Contract.Assert + var platformType = host.PlatformType; + this.contractDotAssert = new Microsoft.Cci.MethodReference( + this.host, this.host.PlatformType.SystemDiagnosticsContractsContract, + CallingConvention.Default, + platformType.SystemVoid, + host.NameTable.GetNameFor("Assert"), + 0, platformType.SystemBoolean); + #endregion Get reference to Contract.Assert + } + + List currentLocals; + ILGenerator currentGenerator; + IEnumerator/*?*/ scopeEnumerator; + bool scopeEnumeratorIsValid; + Stack scopeStack = new Stack(); + + public override IMethodBody Rewrite(IMethodBody methodBody) { + try { + this.currentGenerator = null; + base.Rewrite(methodBody); + if (this.currentGenerator == null) { + //Console.WriteLine("Not rewriting '{0}'", MemberHelper.GetMethodSignature(methodBody.MethodDefinition, NameFormattingOptions.None)); + return methodBody; + } + var newBody = new ILGeneratorMethodBody(this.currentGenerator, methodBody.LocalsAreZeroed, (ushort)(methodBody.MaxStack + 1), + methodBody.MethodDefinition, this.currentLocals ?? new List(), Enumerable.Empty); + return newBody; + } finally { + this.currentGenerator = null; + this.currentLocals = null; + } + } + + public override void RewriteChildren(MethodBody methodBody) { + this.currentLocals = methodBody.LocalVariables; + + try { + var operations = methodBody.Operations; + if (operations == null || operations.Count == 0) return; + + IPrimarySourceLocation startLocation = null; + IPrimarySourceLocation endLocation = null; + var ys = this.pdbReader.GetClosestPrimarySourceLocationsFor(operations[0].Location); + foreach (var y in ys) { + //Console.WriteLine("{0}:{1}({2},{3})", y.Document.Name.Value, MemberHelper.GetMethodSignature(methodBody.MethodDefinition, NameFormattingOptions.None), + // y.StartLine, y.StartColumn); + startLocation = y; + break; + } + + if (startLocation == null || !startLocation.Document.Name.Value.Equals(this.fileName)) return; + + ys = this.pdbReader.GetClosestPrimarySourceLocationsFor(operations[operations.Count - 1].Location); + foreach (var y in ys) { + //Console.WriteLine("{0}:{1}({2},{3})", y.Document.Name.Value, MemberHelper.GetMethodSignature(methodBody.MethodDefinition, NameFormattingOptions.None), + // y.StartLine, y.StartColumn); + endLocation = y; + break; + } + + if (endLocation == null) return; + if (startLocation.StartLine > this.lineNumber) return; + + ProcessOperations(methodBody, operations); + } catch (AssertionInjectorException) { + Console.WriteLine("Internal error during IL mutation for the method '{0}'.", + MemberHelper.GetMemberSignature(methodBody.MethodDefinition, NameFormattingOptions.SmartTypeName)); + } + + } + + private void ProcessOperations(MethodBody methodBody, List operations) { + + var count = operations.Count; + ILGenerator generator = new ILGenerator(this.host, methodBody.MethodDefinition); + if (this.pdbReader != null) { + foreach (var ns in this.pdbReader.GetNamespaceScopes(methodBody)) { + foreach (var uns in ns.UsedNamespaces) + generator.UseNamespace(uns.NamespaceName.Value); + } + } + + this.currentGenerator = generator; + this.scopeEnumerator = this.pdbReader == null ? null : this.pdbReader.GetLocalScopes(methodBody).GetEnumerator(); + this.scopeEnumeratorIsValid = this.scopeEnumerator != null && this.scopeEnumerator.MoveNext(); + + var methodName = MemberHelper.GetMemberSignature(methodBody.MethodDefinition, NameFormattingOptions.SmartTypeName); + + #region Record all offsets that appear as part of an exception handler + Dictionary offsetsUsedInExceptionInformation = new Dictionary(); + foreach (var exceptionInfo in methodBody.OperationExceptionInformation ?? Enumerable.Empty) { + uint x = exceptionInfo.TryStartOffset; + if (!offsetsUsedInExceptionInformation.ContainsKey(x)) offsetsUsedInExceptionInformation.Add(x, true); + x = exceptionInfo.TryEndOffset; + if (!offsetsUsedInExceptionInformation.ContainsKey(x)) offsetsUsedInExceptionInformation.Add(x, true); + x = exceptionInfo.HandlerStartOffset; + if (!offsetsUsedInExceptionInformation.ContainsKey(x)) offsetsUsedInExceptionInformation.Add(x, true); + x = exceptionInfo.HandlerEndOffset; + if (!offsetsUsedInExceptionInformation.ContainsKey(x)) offsetsUsedInExceptionInformation.Add(x, true); + if (exceptionInfo.HandlerKind == HandlerKind.Filter) { + x = exceptionInfo.FilterDecisionStartOffset; + if (!offsetsUsedInExceptionInformation.ContainsKey(x)) offsetsUsedInExceptionInformation.Add(x, true); + } + } + #endregion Record all offsets that appear as part of an exception handler + + Dictionary offset2Label = new Dictionary(); + #region Pass 1: Make a label for each branch target + for (int i = 0; i < count; i++) { + IOperation op = operations[i]; + switch (op.OperationCode) { + case OperationCode.Beq: + case OperationCode.Bge: + case OperationCode.Bge_Un: + case OperationCode.Bgt: + case OperationCode.Bgt_Un: + case OperationCode.Ble: + case OperationCode.Ble_Un: + case OperationCode.Blt: + case OperationCode.Blt_Un: + case OperationCode.Bne_Un: + case OperationCode.Br: + case OperationCode.Brfalse: + case OperationCode.Brtrue: + case OperationCode.Leave: + case OperationCode.Beq_S: + case OperationCode.Bge_S: + case OperationCode.Bge_Un_S: + case OperationCode.Bgt_S: + case OperationCode.Bgt_Un_S: + case OperationCode.Ble_S: + case OperationCode.Ble_Un_S: + case OperationCode.Blt_S: + case OperationCode.Blt_Un_S: + case OperationCode.Bne_Un_S: + case OperationCode.Br_S: + case OperationCode.Brfalse_S: + case OperationCode.Brtrue_S: + case OperationCode.Leave_S: + uint x = (uint)op.Value; + if (!offset2Label.ContainsKey(x)) + offset2Label.Add(x, new ILGeneratorLabel()); + break; + case OperationCode.Switch: + uint[] offsets = op.Value as uint[]; + foreach (var offset in offsets) { + if (!offset2Label.ContainsKey(offset)) + offset2Label.Add(offset, new ILGeneratorLabel()); + } + break; + default: + break; + } + } + #endregion Pass 1: Make a label for each branch target + + #region Pass 2: Emit each operation, along with labels + bool emittedProbe = false; // don't do it more than once + for (int i = 0; i < count; i++) { + IOperation op = operations[i]; + ILGeneratorLabel label; + this.EmitDebugInformationFor(op); + #region Mark operation if it is a label for a branch + if (offset2Label.TryGetValue(op.Offset, out label)) { + generator.MarkLabel(label); + } + #endregion Mark operation if it is a label for a branch + + #region Mark operation if it is pointed to by an exception handler + bool ignore; + uint offset = op.Offset; + if (offsetsUsedInExceptionInformation.TryGetValue(offset, out ignore)) { + foreach (var exceptionInfo in methodBody.OperationExceptionInformation) { + if (offset == exceptionInfo.TryStartOffset) + generator.BeginTryBody(); + + // Never need to do anthing when offset == exceptionInfo.TryEndOffset because + // we pick up an EndTryBody from the HandlerEndOffset below + // generator.EndTryBody(); + + if (offset == exceptionInfo.HandlerStartOffset) { + switch (exceptionInfo.HandlerKind) { + case HandlerKind.Catch: + generator.BeginCatchBlock(exceptionInfo.ExceptionType); + break; + case HandlerKind.Fault: + generator.BeginFaultBlock(); + break; + case HandlerKind.Filter: + generator.BeginFilterBody(); + break; + case HandlerKind.Finally: + generator.BeginFinallyBlock(); + break; + } + } + if (exceptionInfo.HandlerKind == HandlerKind.Filter && offset == exceptionInfo.FilterDecisionStartOffset) { + generator.BeginFilterBlock(); + } + if (offset == exceptionInfo.HandlerEndOffset) + generator.EndTryBody(); + } + } + #endregion Mark operation if it is pointed to by an exception handler + + #region Emit operation along with any injection + + if (!emittedProbe) { + IPrimarySourceLocation location = null; + var locations = this.pdbReader.GetPrimarySourceLocationsFor(op.Location); + foreach (var x in locations) { + if (this.lineNumber <= x.StartLine) { + location = x; + break; + } + } + if (location != null) { + emittedProbe = true; + generator.Emit(OperationCode.Ldc_I4_0); + generator.Emit(OperationCode.Call, this.contractDotAssert); + } + } + + switch (op.OperationCode) { + #region Branches + case OperationCode.Beq: + case OperationCode.Bge: + case OperationCode.Bge_Un: + case OperationCode.Bgt: + case OperationCode.Bgt_Un: + case OperationCode.Ble: + case OperationCode.Ble_Un: + case OperationCode.Blt: + case OperationCode.Blt_Un: + case OperationCode.Bne_Un: + case OperationCode.Br: + case OperationCode.Brfalse: + case OperationCode.Brtrue: + case OperationCode.Leave: + case OperationCode.Beq_S: + case OperationCode.Bge_S: + case OperationCode.Bge_Un_S: + case OperationCode.Bgt_S: + case OperationCode.Bgt_Un_S: + case OperationCode.Ble_S: + case OperationCode.Ble_Un_S: + case OperationCode.Blt_S: + case OperationCode.Blt_Un_S: + case OperationCode.Bne_Un_S: + case OperationCode.Br_S: + case OperationCode.Brfalse_S: + case OperationCode.Brtrue_S: + case OperationCode.Leave_S: + generator.Emit(ILGenerator.LongVersionOf(op.OperationCode), offset2Label[(uint)op.Value]); + break; + case OperationCode.Switch: + uint[] offsets = op.Value as uint[]; + ILGeneratorLabel[] labels = new ILGeneratorLabel[offsets.Length]; + for (int j = 0, n = offsets.Length; j < n; j++) { + labels[j] = offset2Label[offsets[j]]; + } + generator.Emit(OperationCode.Switch, labels); + break; + #endregion Branches + #region Everything else + //case OperationCode.Stloc: + //case OperationCode.Stloc_0: + //case OperationCode.Stloc_1: + //case OperationCode.Stloc_2: + //case OperationCode.Stloc_3: + //case OperationCode.Stloc_S: + // EmitStoreLocal(generator, op); + // break; + default: + if (op.Value == null) { + generator.Emit(op.OperationCode); + break; + } + var typeCode = System.Convert.GetTypeCode(op.Value); + switch (typeCode) { + case TypeCode.Byte: + generator.Emit(op.OperationCode, (byte)op.Value); + break; + case TypeCode.Double: + generator.Emit(op.OperationCode, (double)op.Value); + break; + case TypeCode.Int16: + generator.Emit(op.OperationCode, (short)op.Value); + break; + case TypeCode.Int32: + generator.Emit(op.OperationCode, (int)op.Value); + break; + case TypeCode.Int64: + generator.Emit(op.OperationCode, (long)op.Value); + break; + case TypeCode.Object: + IFieldReference fieldReference = op.Value as IFieldReference; + if (fieldReference != null) { + generator.Emit(op.OperationCode, this.Rewrite(fieldReference)); + break; + } + ILocalDefinition localDefinition = op.Value as ILocalDefinition; + if (localDefinition != null) { + generator.Emit(op.OperationCode, localDefinition); + break; + } + IMethodReference methodReference = op.Value as IMethodReference; + if (methodReference != null) { + generator.Emit(op.OperationCode, this.Rewrite(methodReference)); + break; + } + IParameterDefinition parameterDefinition = op.Value as IParameterDefinition; + if (parameterDefinition != null) { + generator.Emit(op.OperationCode, parameterDefinition); + break; + } + ISignature signature = op.Value as ISignature; + if (signature != null) { + generator.Emit(op.OperationCode, signature); + break; + } + ITypeReference typeReference = op.Value as ITypeReference; + if (typeReference != null) { + generator.Emit(op.OperationCode, this.Rewrite(typeReference)); + break; + } + throw new AssertionInjectorException("Should never get here: no other IOperation argument types should exist"); + case TypeCode.SByte: + generator.Emit(op.OperationCode, (sbyte)op.Value); + break; + case TypeCode.Single: + generator.Emit(op.OperationCode, (float)op.Value); + break; + case TypeCode.String: + generator.Emit(op.OperationCode, (string)op.Value); + break; + default: + // The other cases are the other enum values that TypeCode has. + // But no other argument types should be in the Operations. ILGenerator cannot handle anything else, + // so such IOperations should never exist. + //case TypeCode.Boolean: + //case TypeCode.Char: + //case TypeCode.DateTime: + //case TypeCode.DBNull: + //case TypeCode.Decimal: + //case TypeCode.Empty: // this would be the value for null, but the case when op.Value is null is handled before the switch statement + //case TypeCode.UInt16: + //case TypeCode.UInt32: + //case TypeCode.UInt64: + throw new AssertionInjectorException("Should never get here: no other IOperation argument types should exist"); + } + break; + #endregion Everything else + } + #endregion Emit operation along with any injection + + } + while (generator.InTryBody) + generator.EndTryBody(); + while (this.scopeStack.Count > 0) { + this.currentGenerator.EndScope(); + this.scopeStack.Pop(); + } + #endregion Pass 2: Emit each operation, along with labels + + } + + private void EmitDebugInformationFor(IOperation operation) { + this.currentGenerator.MarkSequencePoint(operation.Location); + if (this.scopeEnumerator == null) return; + ILocalScope/*?*/ currentScope = null; + while (this.scopeStack.Count > 0) { + currentScope = this.scopeStack.Peek(); + if (operation.Offset < currentScope.Offset + currentScope.Length) break; + this.scopeStack.Pop(); + this.currentGenerator.EndScope(); + currentScope = null; + } + while (this.scopeEnumeratorIsValid) { + currentScope = this.scopeEnumerator.Current; + if (currentScope.Offset <= operation.Offset && operation.Offset < currentScope.Offset + currentScope.Length) { + this.scopeStack.Push(currentScope); + this.currentGenerator.BeginScope(); + foreach (var local in this.pdbReader.GetVariablesInScope(currentScope)) + this.currentGenerator.AddVariableToCurrentScope(local); + foreach (var constant in this.pdbReader.GetConstantsInScope(currentScope)) + this.currentGenerator.AddConstantToCurrentScope(constant); + this.scopeEnumeratorIsValid = this.scopeEnumerator.MoveNext(); + } else + break; + } + } + + private void EmitStoreLocal(ILGenerator generator, IOperation op) { + + #region Emit: call Console.WriteLine("foo"); + //generator.Emit(OperationCode.Ldstr, "foo"); + //generator.Emit(OperationCode.Call, this.consoleDotWriteLine); + #endregion Emit: call Console.WriteLine("foo"); + + string localName; + switch (op.OperationCode) { + case OperationCode.Stloc: + case OperationCode.Stloc_S: + ILocalDefinition loc = op.Value as ILocalDefinition; + if (loc == null) throw new AssertionInjectorException("Stloc operation found without a valid operand"); + if (TryGetLocalName(loc, out localName)) { + generator.Emit(OperationCode.Ldstr, localName); + generator.Emit(OperationCode.Call, this.contractDotAssert); + } + generator.Emit(op.OperationCode, loc); + break; + + case OperationCode.Stloc_0: + if (this.currentLocals.Count < 1) + throw new AssertionInjectorException("stloc.0 operation found but no corresponding local in method body"); + if (TryGetLocalName(this.currentLocals[0], out localName)) { + generator.Emit(OperationCode.Ldstr, localName); + generator.Emit(OperationCode.Call, this.contractDotAssert); + } + generator.Emit(op.OperationCode); + break; + + case OperationCode.Stloc_1: + if (this.currentLocals.Count < 2) + throw new AssertionInjectorException("stloc.1 operation found but no corresponding local in method body"); + if (TryGetLocalName(this.currentLocals[1], out localName)) { + generator.Emit(OperationCode.Ldstr, localName); + generator.Emit(OperationCode.Call, this.contractDotAssert); + } + generator.Emit(op.OperationCode); + break; + + case OperationCode.Stloc_2: + if (this.currentLocals.Count < 3) + throw new AssertionInjectorException("stloc.2 operation found but no corresponding local in method body"); + if (TryGetLocalName(this.currentLocals[2], out localName)) { + generator.Emit(OperationCode.Ldstr, localName); + generator.Emit(OperationCode.Call, this.contractDotAssert); + } + generator.Emit(op.OperationCode); + break; + + case OperationCode.Stloc_3: + if (this.currentLocals.Count < 4) + throw new AssertionInjectorException("stloc.3 operation found but no corresponding local in method body"); + if (TryGetLocalName(this.currentLocals[3], out localName)) { + generator.Emit(OperationCode.Ldstr, localName); + generator.Emit(OperationCode.Call, this.contractDotAssert); + } + generator.Emit(op.OperationCode); + break; + + default: + throw new AssertionInjectorException("Should never get here: switch statement was meant to be exhaustive"); + } + } + + private bool TryGetLocalName(ILocalDefinition local, out string localNameFromPDB) { + string localName = local.Name.Value; + localNameFromPDB = null; + if (this.pdbReader != null) { + foreach (IPrimarySourceLocation psloc in this.pdbReader.GetPrimarySourceLocationsForDefinitionOf(local)) { + if (psloc.Source.Length > 0) { + localNameFromPDB = psloc.Source; + break; + } + } + } + return localNameFromPDB != null; + } + + /// + /// Exceptions thrown during extraction. Should not escape this class. + /// + private class AssertionInjectorException : Exception { + /// + /// Exception specific to an error occurring in the contract extractor + /// + public AssertionInjectorException() { } + /// + /// Exception specific to an error occurring in the contract extractor + /// + public AssertionInjectorException(string s) : base(s) { } + /// + /// Exception specific to an error occurring in the contract extractor + /// + public AssertionInjectorException(string s, Exception inner) : base(s, inner) { } + /// + /// Exception specific to an error occurring in the contract extractor + /// + public AssertionInjectorException(SerializationInfo info, StreamingContext context) : base(info, context) { } + } + } + +} diff --git a/BCT/GetMeHere/AssertionInjector/Properties/AssemblyInfo.cs b/BCT/GetMeHere/AssertionInjector/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e58cc425 --- /dev/null +++ b/BCT/GetMeHere/AssertionInjector/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("AssertionInjector")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("AssertionInjector")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[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("f39cb052-3add-469f-9b89-6fdd7f5b1ec4")] + +// 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")] -- cgit v1.2.3