diff --git a/TwinpackShared/Models/ConfigFactory.cs b/TwinpackShared/Models/ConfigFactory.cs index b6ac89b..02f0356 100644 --- a/TwinpackShared/Models/ConfigFactory.cs +++ b/TwinpackShared/Models/ConfigFactory.cs @@ -148,6 +148,8 @@ public static async Task CreateFromSolutionFileAsync(string path = ".", //Project("{DFBE7525-6864-4E62-8B2E-D530D69D9D96}") = "ZApplication", "ZApplication.tspproj", "{55567FAF-D581-431A-8E43-734906367EA7}" var projectMatches = Regex.Matches(slnContent, "Project\\(.*?\\)\\s*=\\s*\"(.*?)\"\\s*,\\s*\"(.*?ts[p]?proj)\"\\s*,.*"); + config.Projects = new List(); + foreach(Match projectMatch in projectMatches) { var project = new ConfigProject(); @@ -166,8 +168,9 @@ public static async Task CreateFromSolutionFileAsync(string path = ".", project.Plcs.Add(plcConfig); } - config.Projects = new List(); - config.Projects.Add(project); + + if(project.Plcs.Any()) + config.Projects.Add(project); } return config; diff --git a/TwinpackTests/ConfigFactoryTest.cs b/TwinpackTests/ConfigFactoryTest.cs index 5f18e27..2b0ff68 100644 --- a/TwinpackTests/ConfigFactoryTest.cs +++ b/TwinpackTests/ConfigFactoryTest.cs @@ -20,9 +20,9 @@ public async Task CreateFromSolutionFileWithoutFilterAsync() Assert.AreEqual(@"assets\TestSolution", config.WorkingDirectory); Assert.AreEqual(@"TestSolution.sln", config.Solution); Assert.AreEqual(@"assets\TestSolution\.Zeugwerk\config.json", config.FilePath); - Assert.AreEqual(1, config.Projects.Count); + Assert.AreEqual(2, config.Projects.Count); - var project = config.Projects.FirstOrDefault(); + var project = config.Projects.Where(x => x.Name == "TestProject").FirstOrDefault(); Assert.AreEqual(@"TestProject", project?.Name); Assert.AreEqual(1, project?.Plcs.Count); @@ -53,8 +53,21 @@ public async Task CreateFromSolutionFileWithFilterAsync() Assert.AreEqual(1, config.Projects.Count); var project = config.Projects.FirstOrDefault(); - Assert.AreEqual(@"TestProject", project?.Name); - Assert.AreEqual(0, project?.Plcs.Count); + Assert.AreEqual(@"TestProject2", project?.Name); + Assert.AreEqual(1, project?.Plcs.Count); + + var plc = project.Plcs.FirstOrDefault(); + Assert.AreEqual(@"PlcLibrary1", plc?.Name); + Assert.AreEqual(@"PlcLibrary1", plc?.Title); + Assert.AreEqual(ConfigPlcProject.PlcProjectType.Library, plc?.PlcType); + Assert.AreEqual(1, plc?.References.Count); + Assert.AreEqual("1.2.3.4", plc?.Version); + Assert.AreEqual(@"*", plc?.References?.FirstOrDefault().Key); + Assert.AreEqual(2, plc?.References?.FirstOrDefault().Value.Count); + + var references = plc?.References?.FirstOrDefault().Value; + Assert.AreEqual(@"Tc2_Standard=*", references[0]); + Assert.AreEqual(@"Tc2_System=*", references[1]); } [TestMethod] diff --git a/TwinpackTests/TwinpackTests.csproj b/TwinpackTests/TwinpackTests.csproj index 0a64821..b36bbae 100644 --- a/TwinpackTests/TwinpackTests.csproj +++ b/TwinpackTests/TwinpackTests.csproj @@ -197,6 +197,16 @@ + + Always + + + + + + + Always + Always @@ -211,6 +221,10 @@ + + + + diff --git a/TwinpackTests/assets/TestSolution/TestLibraryProject/TestLibraryProject.tsproj b/TwinpackTests/assets/TestSolution/TestLibraryProject/TestLibraryProject.tsproj new file mode 100644 index 0000000..91d52a6 --- /dev/null +++ b/TwinpackTests/assets/TestSolution/TestLibraryProject/TestLibraryProject.tsproj @@ -0,0 +1,4 @@ + + + + diff --git a/TwinpackTests/assets/TestSolution/TestLibraryProject/_Boot/TargetDescription.xml b/TwinpackTests/assets/TestSolution/TestLibraryProject/_Boot/TargetDescription.xml new file mode 100644 index 0000000..8158e7c --- /dev/null +++ b/TwinpackTests/assets/TestSolution/TestLibraryProject/_Boot/TargetDescription.xml @@ -0,0 +1,9 @@ + + + + 3 + 1 + 4024 + 55 + + diff --git a/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/POUs/MAIN.TcPOU b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/POUs/MAIN.TcPOU new file mode 100644 index 0000000..579c2f8 --- /dev/null +++ b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/POUs/MAIN.TcPOU @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/PlcLibrary1.plcproj b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/PlcLibrary1.plcproj new file mode 100644 index 0000000..cf2ac4e --- /dev/null +++ b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/PlcLibrary1.plcproj @@ -0,0 +1,79 @@ + + + + 1.0.0.0 + 2.0 + {6cf5e514-bb25-4f70-86ce-239053f3b5c2} + True + true + true + false + PlcLibrary1 + 3.1.4024.0 + {c3ad93b5-27ce-4e9b-b22f-735eec7fc584} + {a23d5dcd-0bef-4768-8a44-d4130b6be47d} + {52cb74ac-95bf-4054-8edd-6c30e0c2a553} + {14e7e428-285d-4019-98fd-9f4f0605b9d1} + {984cfd18-5f5c-4540-9eca-3835a45b5e54} + {0944d9cc-b661-4f44-88a0-627640c58101} + false + 1.2.3.4 + My Company + PlcLibrary1 + + + + Code + + + + + + + + + + + Tc2_Standard, * (Beckhoff Automation GmbH) + Tc2_Standard + + + Tc2_System, * (Beckhoff Automation GmbH) + Tc2_System + + + + + + + + "<ProjectRoot>" + + {40450F57-0AA3-4216-96F3-5444ECB29763} + + "{40450F57-0AA3-4216-96F3-5444ECB29763}" + + + ActiveVisuProfile + IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA= + + + {192FAD59-8248-4824-A8DE-9177C94C195A} + + "{192FAD59-8248-4824-A8DE-9177C94C195A}" + + + + + + + + + System.Collections.Hashtable + {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} + System.String + + + + + \ No newline at end of file diff --git a/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library new file mode 100644 index 0000000..4cb0bb4 Binary files /dev/null and b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc2_standard/3.3.3.0/tc2_standard.compiled-library differ diff --git a/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc2_system/3.6.2.0/tc2_system.compiled-library b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc2_system/3.6.2.0/tc2_system.compiled-library new file mode 100644 index 0000000..74ce7a6 Binary files /dev/null and b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc2_system/3.6.2.0/tc2_system.compiled-library differ diff --git a/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc3_module/3.3.23.0/tc3_module.compiled-library b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc3_module/3.3.23.0/tc3_module.compiled-library new file mode 100644 index 0000000..de07813 Binary files /dev/null and b/TwinpackTests/assets/TestSolution/TestProject2/PlcLibrary1/_Libraries/beckhoff automation gmbh/tc3_module/3.3.23.0/tc3_module.compiled-library differ diff --git a/TwinpackTests/assets/TestSolution/TestProject2/TestProject2.tspproj b/TwinpackTests/assets/TestSolution/TestProject2/TestProject2.tspproj new file mode 100644 index 0000000..4541485 --- /dev/null +++ b/TwinpackTests/assets/TestSolution/TestProject2/TestProject2.tspproj @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/TwinpackTests/assets/TestSolution/TestSolution.project.~u b/TwinpackTests/assets/TestSolution/TestSolution.project.~u new file mode 100644 index 0000000..119491d --- /dev/null +++ b/TwinpackTests/assets/TestSolution/TestSolution.project.~u @@ -0,0 +1,4 @@ +Zeugwerker +WERKSTATT2 +7040 +638417069099902527 diff --git a/TwinpackTests/assets/TestSolution/TestSolution.sln b/TwinpackTests/assets/TestSolution/TestSolution.sln index d52e540..f7daf50 100644 --- a/TwinpackTests/assets/TestSolution/TestSolution.sln +++ b/TwinpackTests/assets/TestSolution/TestSolution.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 15.0.33403.129 MinimumVisualStudioVersion = 10.0.40219.1 Project("{B1E792BE-AA5F-4E3C-8C82-674BF9C0715B}") = "TestProject", "TestProject\TestProject.tsproj", "{FBF99FD5-3861-429A-AA44-FD661631289F}" EndProject +Project("{DFBE7525-6864-4E62-8B2E-D530D69D9D96}") = "TestProject2", "TestProject2\TestProject2.tspproj", "{490F33AB-9266-45C8-9D63-615AC45701A7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|TwinCAT CE7 (ARMV7) = Debug|TwinCAT CE7 (ARMV7) @@ -49,6 +51,38 @@ Global {76722466-87A7-49CC-9A2E-8CDDBA5BC42C}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) {76722466-87A7-49CC-9A2E-8CDDBA5BC42C}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) {76722466-87A7-49CC-9A2E-8CDDBA5BC42C}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) + {490F33AB-9266-45C8-9D63-615AC45701A7}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) + {6CF5E514-BB25-4F70-86CE-239053F3B5C2}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE