--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">\r
+\r
+ <ItemGroup>
+ <ProjectReference Include="..\NetcoreDbgTest\NetcoreDbgTest.csproj" />
+ </ItemGroup>\r
+\r
+ <PropertyGroup>\r
+ <OutputType>Exe</OutputType>\r
+ <TargetFramework>netcoreapp3.1</TargetFramework>\r
+ </PropertyGroup>\r
+\r
+</Project>\r
--- /dev/null
+using System;\r
+using System.IO;\r
+\r
+using NetcoreDbgTest;\r
+using NetcoreDbgTest.MI;\r
+using NetcoreDbgTest.Script;\r
+\r
+using Xunit;\r
+\r
+namespace NetcoreDbgTest.Script\r
+{\r
+ class Context\r
+ {\r
+ public static void Prepare()\r
+ {\r
+ Assert.Equal(MIResultClass.Done,\r
+ MIDebugger.Request("-file-exec-and-symbols "\r
+ + DebuggeeInfo.CorerunPath).Class);\r
+\r
+ Assert.Equal(MIResultClass.Done,\r
+ MIDebugger.Request("-exec-arguments "\r
+ + DebuggeeInfo.TargetAssemblyPath).Class);\r
+\r
+ Assert.Equal(MIResultClass.Running, MIDebugger.Request("-exec-run").Class);\r
+ }\r
+\r
+ static bool IsStoppedEvent(MIOutOfBandRecord record)\r
+ {\r
+ if (record.Type != MIOutOfBandRecordType.Async) {\r
+ return false;\r
+ }\r
+\r
+ var asyncRecord = (MIAsyncRecord)record;\r
+\r
+ if (asyncRecord.Class != MIAsyncRecordClass.Exec ||\r
+ asyncRecord.Output.Class != MIAsyncOutputClass.Stopped) {\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ public static void WasEntryPointHit()\r
+ {\r
+ Func<MIOutOfBandRecord, bool> filter = (record) => {\r
+ if (!IsStoppedEvent(record)) {\r
+ return false;\r
+ }\r
+\r
+ var output = ((MIAsyncRecord)record).Output;\r
+ var reason = (MIConst)output["reason"];\r
+\r
+ if (reason.CString != "entry-point-hit") {\r
+ return false;\r
+ }\r
+\r
+ var frame = (MITuple)(output["frame"]);\r
+ var func = (MIConst)(frame["func"]);\r
+ if (func.CString == DebuggeeInfo.TestName + ".Program.Main()") {\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ };\r
+\r
+ if (!MIDebugger.IsEventReceived(filter))\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+ }\r
+\r
+ public static void WasBreakpointHit(Breakpoint breakpoint)\r
+ {\r
+ var bp = (LineBreakpoint)breakpoint;\r
+\r
+ Func<MIOutOfBandRecord, bool> filter = (record) => {\r
+ if (!IsStoppedEvent(record)) {\r
+ return false;\r
+ }\r
+\r
+ var output = ((MIAsyncRecord)record).Output;\r
+ var reason = (MIConst)output["reason"];\r
+\r
+ if (reason.CString != "breakpoint-hit") {\r
+ return false;\r
+ }\r
+\r
+ var frame = (MITuple)(output["frame"]);\r
+ var fileName = (MIConst)(frame["file"]);\r
+ var numLine = (MIConst)(frame["line"]);\r
+\r
+ if (fileName.CString == bp.FileName &&\r
+ numLine.CString == bp.NumLine.ToString()) {\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ };\r
+\r
+ if (!MIDebugger.IsEventReceived(filter))\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+ }\r
+\r
+ public static void WasExit()\r
+ {\r
+ Func<MIOutOfBandRecord, bool> filter = (record) => {\r
+ if (!IsStoppedEvent(record)) {\r
+ return false;\r
+ }\r
+\r
+ var output = ((MIAsyncRecord)record).Output;\r
+ var reason = (MIConst)output["reason"];\r
+\r
+ if (reason.CString != "exited") {\r
+ return false;\r
+ }\r
+\r
+ var exitCode = (MIConst)output["exit-code"];\r
+\r
+ if (exitCode.CString == "0") {\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ };\r
+\r
+ if (!MIDebugger.IsEventReceived(filter))\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+ }\r
+\r
+ public static void DebuggerExit()\r
+ {\r
+ Assert.Equal(MIResultClass.Exit, Context.MIDebugger.Request("-gdb-exit").Class);\r
+ }\r
+\r
+ public static void EnableBreakpoint(string bpName)\r
+ {\r
+ Breakpoint bp = DebuggeeInfo.Breakpoints[bpName];\r
+\r
+ Assert.Equal(BreakpointType.Line, bp.Type);\r
+\r
+ var lbp = (LineBreakpoint)bp;\r
+\r
+ Assert.Equal(MIResultClass.Done,\r
+ MIDebugger.Request("-break-insert -f "\r
+ + lbp.FileName + ":" + lbp.NumLine).Class);\r
+ }\r
+\r
+ public static void Continue()\r
+ {\r
+ Assert.Equal(MIResultClass.Running, MIDebugger.Request("-exec-continue").Class);\r
+ }\r
+\r
+ static MIDebugger MIDebugger = new MIDebugger();\r
+ }\r
+}\r
+\r
+namespace MITest中文目录\r
+{\r
+ class Program\r
+ {\r
+ static void Main(string[] args)\r
+ {\r
+ Label.Checkpoint("init", "bp_test", () => {\r
+ Context.Prepare();\r
+ Context.WasEntryPointHit();\r
+ Context.EnableBreakpoint("bp");\r
+ Context.Continue();\r
+ });\r
+\r
+ Console.WriteLine("A breakpoint \"bp\" is set on this line"); Label.Breakpoint("bp");\r
+\r
+ Label.Checkpoint("bp_test", "finish", () => {\r
+ Context.WasBreakpointHit(DebuggeeInfo.Breakpoints["bp"]);\r
+ Context.Continue();\r
+ });\r
+\r
+ Label.Checkpoint("finish", "", () => {\r
+ Context.WasExit();\r
+ Context.DebuggerExit();\r
+ });\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">\r
+\r
+ <ItemGroup>
+ <ProjectReference Include="..\NetcoreDbgTest\NetcoreDbgTest.csproj" />
+ </ItemGroup>\r
+\r
+ <PropertyGroup>\r
+ <OutputType>Exe</OutputType>\r
+ <TargetFramework>netcoreapp3.1</TargetFramework>\r
+ </PropertyGroup>\r
+\r
+</Project>\r
--- /dev/null
+using System;\r
+using System.IO;\r
+using System.Collections.Generic;\r
+\r
+using NetcoreDbgTest;\r
+using NetcoreDbgTest.VSCode;\r
+using NetcoreDbgTest.Script;\r
+\r
+using Xunit;\r
+using Newtonsoft.Json;\r
+\r
+namespace NetcoreDbgTest.Script\r
+{\r
+ // Context includes methods and constants which\r
+ // will be move to debugger API\r
+ class Context\r
+ {\r
+ public static void PrepareStart()\r
+ {\r
+ InitializeRequest initializeRequest = new InitializeRequest();\r
+ initializeRequest.arguments.clientID = "vscode";\r
+ initializeRequest.arguments.clientName = "Visual Studio Code";\r
+ initializeRequest.arguments.adapterID = "coreclr";\r
+ initializeRequest.arguments.pathFormat = "path";\r
+ initializeRequest.arguments.linesStartAt1 = true;\r
+ initializeRequest.arguments.columnsStartAt1 = true;\r
+ initializeRequest.arguments.supportsVariableType = true;\r
+ initializeRequest.arguments.supportsVariablePaging = true;\r
+ initializeRequest.arguments.supportsRunInTerminalRequest = true;\r
+ initializeRequest.arguments.locale = "en-us";\r
+ Assert.True(VSCodeDebugger.Request(initializeRequest).Success);\r
+\r
+ LaunchRequest launchRequest = new LaunchRequest();\r
+ launchRequest.arguments.name = ".NET Core Launch (console) with pipeline";\r
+ launchRequest.arguments.type = "coreclr";\r
+ launchRequest.arguments.preLaunchTask = "build";\r
+ launchRequest.arguments.program = DebuggeeInfo.TargetAssemblyPath;\r
+ launchRequest.arguments.cwd = "";\r
+ launchRequest.arguments.console = "internalConsole";\r
+ launchRequest.arguments.stopAtEntry = true;\r
+ launchRequest.arguments.internalConsoleOptions = "openOnSessionStart";\r
+ launchRequest.arguments.__sessionId = Guid.NewGuid().ToString();\r
+ Assert.True(VSCodeDebugger.Request(launchRequest).Success);\r
+ }\r
+\r
+ public static void PrepareEnd()\r
+ {\r
+ ConfigurationDoneRequest configurationDoneRequest = new ConfigurationDoneRequest();\r
+ Assert.True(VSCodeDebugger.Request(configurationDoneRequest).Success);\r
+ }\r
+\r
+ public static void WasEntryPointHit()\r
+ {\r
+ Func<string, bool> filter = (resJSON) => {\r
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")\r
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "entry")) {\r
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));\r
+ return true;\r
+ }\r
+ return false;\r
+ };\r
+\r
+ if (!VSCodeDebugger.IsEventReceived(filter))\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+ }\r
+\r
+ public static void WasExit()\r
+ {\r
+ bool wasExited = false;\r
+ int ?exitCode = null;\r
+ bool wasTerminated = false;\r
+\r
+ Func<string, bool> filter = (resJSON) => {\r
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "exited")) {\r
+ wasExited = true;\r
+ ExitedEvent exitedEvent = JsonConvert.DeserializeObject<ExitedEvent>(resJSON);\r
+ exitCode = exitedEvent.body.exitCode;\r
+ }\r
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "terminated")) {\r
+ wasTerminated = true;\r
+ }\r
+ if (wasExited && exitCode == 0 && wasTerminated)\r
+ return true;\r
+\r
+ return false;\r
+ };\r
+\r
+ if (!VSCodeDebugger.IsEventReceived(filter))\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+ }\r
+\r
+ public static void DebuggerExit()\r
+ {\r
+ DisconnectRequest disconnectRequest = new DisconnectRequest();\r
+ disconnectRequest.arguments = new DisconnectArguments();\r
+ disconnectRequest.arguments.restart = false;\r
+ Assert.True(VSCodeDebugger.Request(disconnectRequest).Success);\r
+ }\r
+\r
+ public static void AddBreakpoint(string bpName, string Condition = null)\r
+ {\r
+ Breakpoint bp = DebuggeeInfo.Breakpoints[bpName];\r
+ Assert.Equal(BreakpointType.Line, bp.Type);\r
+ var lbp = (LineBreakpoint)bp;\r
+\r
+ BreakpointSourceName = lbp.FileName;\r
+ BreakpointList.Add(new SourceBreakpoint(lbp.NumLine, Condition));\r
+ BreakpointLines.Add(lbp.NumLine);\r
+ }\r
+\r
+ public static void SetBreakpoints()\r
+ {\r
+ SetBreakpointsRequest setBreakpointsRequest = new SetBreakpointsRequest();\r
+ setBreakpointsRequest.arguments.source.name = BreakpointSourceName;\r
+ // NOTE this code works only with one source file\r
+ setBreakpointsRequest.arguments.source.path = DebuggeeInfo.SourceFilesPath;\r
+ setBreakpointsRequest.arguments.lines.AddRange(BreakpointLines);\r
+ setBreakpointsRequest.arguments.breakpoints.AddRange(BreakpointList);\r
+ setBreakpointsRequest.arguments.sourceModified = false;\r
+ Assert.True(VSCodeDebugger.Request(setBreakpointsRequest).Success);\r
+ }\r
+\r
+ public static void WasBreakpointHit(Breakpoint breakpoint)\r
+ {\r
+ Func<string, bool> filter = (resJSON) => {\r
+ if (VSCodeDebugger.isResponseContainProperty(resJSON, "event", "stopped")\r
+ && VSCodeDebugger.isResponseContainProperty(resJSON, "reason", "breakpoint")) {\r
+ threadId = Convert.ToInt32(VSCodeDebugger.GetResponsePropertyValue(resJSON, "threadId"));\r
+ return true;\r
+ }\r
+ return false;\r
+ };\r
+\r
+ if (!VSCodeDebugger.IsEventReceived(filter))\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+\r
+ StackTraceRequest stackTraceRequest = new StackTraceRequest();\r
+ stackTraceRequest.arguments.threadId = threadId;\r
+ stackTraceRequest.arguments.startFrame = 0;\r
+ stackTraceRequest.arguments.levels = 20;\r
+ var ret = VSCodeDebugger.Request(stackTraceRequest);\r
+ Assert.True(ret.Success);\r
+\r
+ Assert.Equal(BreakpointType.Line, breakpoint.Type);\r
+ var lbp = (LineBreakpoint)breakpoint;\r
+\r
+ StackTraceResponse stackTraceResponse =\r
+ JsonConvert.DeserializeObject<StackTraceResponse>(ret.ResponseStr);\r
+\r
+ foreach (var Frame in stackTraceResponse.body.stackFrames) {\r
+ if (Frame.line == lbp.NumLine\r
+ && Frame.source.name == lbp.FileName\r
+ // NOTE this code works only with one source file\r
+ && Frame.source.path == DebuggeeInfo.SourceFilesPath)\r
+ return;\r
+ }\r
+\r
+ throw new NetcoreDbgTestCore.ResultNotSuccessException();\r
+ }\r
+\r
+ public static void Continue()\r
+ {\r
+ ContinueRequest continueRequest = new ContinueRequest();\r
+ continueRequest.arguments.threadId = threadId;\r
+ Assert.True(VSCodeDebugger.Request(continueRequest).Success);\r
+ }\r
+\r
+ static VSCodeDebugger VSCodeDebugger = new VSCodeDebugger();\r
+ static int threadId = -1;\r
+ public static string BreakpointSourceName;\r
+ public static List<SourceBreakpoint> BreakpointList = new List<SourceBreakpoint>();\r
+ public static List<int> BreakpointLines = new List<int>();\r
+ }\r
+}\r
+\r
+namespace VSCodeTest中文目录\r
+{\r
+ class Program\r
+ {\r
+ static void Main(string[] args)\r
+ {\r
+ Label.Checkpoint("init", "bp_test", () => {\r
+ Context.PrepareStart();\r
+ Context.AddBreakpoint("bp");\r
+ Context.SetBreakpoints();\r
+ Context.PrepareEnd();\r
+ Context.WasEntryPointHit();\r
+ Context.Continue();\r
+ });\r
+\r
+ Console.WriteLine("A breakpoint \"bp\" is set on this line"); Label.Breakpoint("bp");\r
+\r
+ Label.Checkpoint("bp_test", "finish", () => {\r
+ Context.WasBreakpointHit(DebuggeeInfo.Breakpoints["bp"]);\r
+ Context.Continue();\r
+ });\r
+\r
+ Label.Checkpoint("finish", "", () => {\r
+ Context.WasExit();\r
+ Context.DebuggerExit();\r
+ });\r
+ }\r
+ }\r
+}\r
-using System;
+using System;
using System.IO;
using Xunit;
[InlineData("MITestExceptionBreakpoint", "Program.cs")]
[InlineData("MITestExitCode", "Program.cs")]
[InlineData("MITestEvalNotEnglish", "Program.cs")]
+ [InlineData("MITest中文目录", "中文文件名.cs")]
[InlineData("VSCodeExampleTest", "Program.cs")]
[InlineData("VSCodeTestBreakpoint", "Program.cs")]
[InlineData("VSCodeTestFuncBreak", "Program.cs")]
[InlineData("VSCodeTestEnv", "Program.cs")]
[InlineData("VSCodeTestExitCode", "Program.cs")]
[InlineData("VSCodeTestEvalNotEnglish", "Program.cs")]
+ [InlineData("VSCodeTest中文目录", "中文文件名.cs")]
public void Run(string testCaseName, string testCourceList)
{
string testSuiteRoot = Path.GetFullPath(
-<Project Sdk="Microsoft.NET.Sdk">\r
+<Project Sdk="Microsoft.NET.Sdk">\r
\r
<PropertyGroup>\r
<TargetFramework>netcoreapp3.1</TargetFramework>\r
<ProjectReference Include="..\MITestTarget\MITestTarget.csproj" />\r
<ProjectReference Include="..\MITestExceptionBreakpoint\MITestExceptionBreakpoint.csproj" />\r
<ProjectReference Include="..\MITestEvalNotEnglish\MITestEvalNotEnglish.csproj" />\r
+ <ProjectReference Include="..\MITest中文目录\MITest中文目录.csproj" />\r
<ProjectReference Include="..\VSCodeExampleTest\VSCodeExampleTest.csproj" />\r
<ProjectReference Include="..\VSCodeTestBreakpoint\VSCodeTestBreakpoint.csproj" />\r
<ProjectReference Include="..\VSCodeTestFuncBreak\VSCodeTestFuncBreak.csproj" />\r
<ProjectReference Include="..\VSCodeTestStepping\VSCodeTestStepping.csproj" />\r
<ProjectReference Include="..\VSCodeTestEnv\VSCodeTestEnv.csproj" />\r
<ProjectReference Include="..\VSCodeTestEvalNotEnglish\VSCodeTestEvalNotEnglish.csproj" />\r
+ <ProjectReference Include="..\VSCodeTest中文目录\VSCodeTest中文目录.csproj" />\r
</ItemGroup>\r
\r
</Project>\r
-# Making Windows PowerShell console window Unicode (UTF-8) aware.
+# Making Windows PowerShell console window Unicode (UTF-8) aware.
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
$ALL_TEST_NAMES = @(
"MITestExceptionBreakpoint"
"MITestExitCode"
"MITestEvalNotEnglish"
+ "MITest中文目录"
"VSCodeExampleTest"
"VSCodeTestBreakpoint"
"VSCodeTestFuncBreak"
"VSCodeTestEnv"
"VSCodeTestExitCode"
"VSCodeTestEvalNotEnglish"
+ "VSCodeTest中文目录"
)
$TEST_NAMES = $args
"MITestExceptionBreakpoint"
"MITestExitCode"
"MITestEvalNotEnglish"
+ "MITest中文目录"
"VSCodeExampleTest"
"VSCodeTestBreakpoint"
"VSCodeTestFuncBreak"
"VSCodeTestEnv"
"VSCodeTestExitCode"
"VSCodeTestEvalNotEnglish"
+ "VSCodeTest中文目录"
)
TEST_NAMES="$@"
-# Making Windows PowerShell console window Unicode (UTF-8) aware.
+# Making Windows PowerShell console window Unicode (UTF-8) aware.
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
# Please prepare sdb target with netcoredbg before start
"VSCodeTestEvalNotEnglish"
)
+# Skipped tests:
+# MITest中文目录 and VSCodeTest中文目录 - sdb related issue with non-English assembly/pdb name during 'push'
+
$TEST_NAMES = $args
if ($TEST_NAMES.count -eq 0) {
"MITestExceptionBreakpoint"
"MITestExitCode"
"MITestEvalNotEnglish"
+ "MITest中文目录"
"VSCodeExampleTest"
"VSCodeTestBreakpoint"
"VSCodeTestFuncBreak"
"VSCodeTestEnv"
"VSCodeTestExitCode"
"VSCodeTestEvalNotEnglish"
+ "VSCodeTest中文目录"
)
SDB=${SDB:-sdb}
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSCodeTestEvalNotEnglish", "VSCodeTestEvalNotEnglish\VSCodeTestEvalNotEnglish.csproj", "{5FE6BDFF-AD0E-4E1C-A596-6D583D0777BC}"
>>>>>>> Add MI/GDB and VSCode tests for non-English var evaluation.
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MITest中文目录", "MITest中文目录\MITest中文目录.csproj", "{6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSCodeTest中文目录", "VSCodeTest中文目录\VSCodeTest中文目录.csproj", "{56BFF745-3A77-44BF-B068-3E13901295A1}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
{5FE6BDFF-AD0E-4E1C-A596-6D583D0777BC}.Release|x64.Build.0 = Release|Any CPU
{5FE6BDFF-AD0E-4E1C-A596-6D583D0777BC}.Release|x86.ActiveCfg = Release|Any CPU
{5FE6BDFF-AD0E-4E1C-A596-6D583D0777BC}.Release|x86.Build.0 = Release|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Debug|x64.Build.0 = Debug|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Debug|x86.Build.0 = Debug|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Release|x64.ActiveCfg = Release|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Release|x64.Build.0 = Release|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Release|x86.ActiveCfg = Release|Any CPU
+ {6B76C4A1-D871-4A78-B284-FE8E2FCBA10D}.Release|x86.Build.0 = Release|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Debug|x64.Build.0 = Debug|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Debug|x86.Build.0 = Debug|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Release|x64.ActiveCfg = Release|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Release|x64.Build.0 = Release|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Release|x86.ActiveCfg = Release|Any CPU
+ {56BFF745-3A77-44BF-B068-3E13901295A1}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal