diff --git a/Doc/EWSoftwarePDI.shfbproj b/Doc/EWSoftwarePDI.shfbproj
index 155c992..f274ea3 100644
--- a/Doc/EWSoftwarePDI.shfbproj
+++ b/Doc/EWSoftwarePDI.shfbproj
@@ -26,7 +26,7 @@
- .NET Framework 4.0
+ Cross-platform (.NET Core/.NET Standard)
EWSoftware.PDI Namespace Documentation
https://github.com/EWSoftware/PDI
[v{%40HelpFileVersion}] Copyright \xA9 2003-2018, Eric Woodruff, All Rights Reserved
@@ -34,16 +34,6 @@
VS2013
Standard
-
-
-
-
-
-
@@ -59,7 +49,7 @@
Personal Data Interchange ASP.NET web server control designers developed by Eric Woodruff.
Personal Data Interchange Windows Forms controls developed by Eric Woodruff.
- 2015.1.19.0
+ 2018.11.17.0
@@ -160,6 +150,7 @@
False
..\Source\
True
+ 100
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/CSharpDemos/PDIDatesTest/App.ico b/Source/CSharpDemos/PDIDatesTest/App.ico
deleted file mode 100644
index f8eb00f..0000000
Binary files a/Source/CSharpDemos/PDIDatesTest/App.ico and /dev/null differ
diff --git a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs
index 880b228..e3f8ce8 100644
--- a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs
+++ b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs
@@ -2,7 +2,7 @@
// System : EWSoftware PDI Demonstration Applications
// File : PDIDatesTest.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 11/15/2018
+// Updated : 11/19/2018
// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved
// Compiler: Visual C#
//
@@ -22,8 +22,6 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
-using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
@@ -49,54 +47,58 @@ static void Main(string[] args)
DateTimeCollection recurDates;
int yearFrom, yearTo, idx;
- if(args.GetUpperBound(0) < 1)
+ if(args.Length != 2)
{
- Console.WriteLine("Specify a starting and ending year");
- return;
- }
+ Console.WriteLine("Using current year +/- 4 years for testing\r\n");
- try
+ yearFrom = DateTime.Today.Year - 4;
+ yearTo = yearFrom + 8;
+ }
+ else
{
- yearFrom = Convert.ToInt32(args[0]);
- yearTo = Convert.ToInt32(args[1]);
+ try
+ {
+ yearFrom = Convert.ToInt32(args[0]);
+ yearTo = Convert.ToInt32(args[1]);
- if(yearFrom < 1)
- yearFrom = 1;
+ if(yearFrom < 1)
+ yearFrom = 1;
- if(yearFrom > 9999)
- yearFrom = 9999;
+ if(yearFrom > 9999)
+ yearFrom = 9999;
- if(yearTo < 1)
- yearTo = 1;
+ if(yearTo < 1)
+ yearTo = 1;
- if(yearTo > 9999)
- yearTo = 9999;
+ if(yearTo > 9999)
+ yearTo = 9999;
- if(yearFrom > yearTo)
+ if(yearFrom > yearTo)
+ {
+ idx = yearFrom;
+ yearFrom = yearTo;
+ yearTo = idx;
+ }
+ }
+ catch
{
- idx = yearFrom;
- yearFrom = yearTo;
- yearTo = idx;
+ Console.WriteLine("Invalid year specified on command line");
+ return;
}
}
- catch
- {
- Console.WriteLine("Invalid year specified on command line");
- return;
- }
// Test DateUtils.CalculateOccurrenceDate
- Console.WriteLine("Fourth weekday in January 2004: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0));
+ Console.WriteLine("Fourth weekday in January 2018: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0));
- Console.WriteLine("Fourth weekday in January 2004 + 2: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2));
+ Console.WriteLine("Fourth weekday in January 2018 + 2: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2));
- Console.WriteLine("Last weekend day in January 2004: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0));
+ Console.WriteLine("Last weekend day in January 2018: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0));
- Console.WriteLine("Last weekend day in January 2004 + 2: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2));
+ Console.WriteLine("Last weekend day in January 2018 + 2: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2));
// Pause to review output
Console.WriteLine("Press ENTER to continue");
@@ -109,7 +111,7 @@ static void Main(string[] args)
Console.WriteLine("Week start = Monday");
DayOfWeek dow = DayOfWeek.Monday;
- for(year = 1998; year < 2010; year++)
+ for(year = yearFrom; year <= yearTo; year++)
{
for(idx = 1; idx < 54; idx++)
if(idx != 53 || DateUtils.WeeksInYear(year, dow) == 53)
@@ -176,58 +178,58 @@ static void Main(string[] args)
// Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone
Console.WriteLine("Expressed in Universal Time");
- Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", false));
- Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", false));
- Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", false));
- Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", false));
- Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.123", false));
- Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.98Z", false));
- Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", false));
- Console.WriteLine("20040314T102531.123+0830 = {0}",
- DateUtils.FromISO8601String("20040314T102531.123+0830", false));
-
- Console.WriteLine("\n2004-03-14 = {0}", DateUtils.FromISO8601String("2004-03-14", false));
- Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", false));
- Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", false));
- Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", false));
- Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.123", false));
- Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", false));
- Console.WriteLine("2004-03-14T10:25:31-04 = {0}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31-04", false));
- Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", false));
+ Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", false));
+ Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", false));
+ Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", false));
+ Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", false));
+ Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.123", false));
+ Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.98Z", false));
+ Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", false));
+ Console.WriteLine("20180314T102531.123+0830 = {0}",
+ DateUtils.FromISO8601String("20180314T102531.123+0830", false));
+
+ Console.WriteLine("\n2018-03-14 = {0}", DateUtils.FromISO8601String("2018-03-14", false));
+ Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", false));
+ Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", false));
+ Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", false));
+ Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.123", false));
+ Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", false));
+ Console.WriteLine("2018-03-14T10:25:31-04 = {0}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31-04", false));
+ Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", false));
// Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone
Console.WriteLine("\nExpressed in Local Time");
- Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", true));
- Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", true));
- Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", true));
- Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", true));
- Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.123", true));
- Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.98Z", true));
- Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", true));
- Console.WriteLine("20040314T102531.123+0830 = {0}",
- DateUtils.FromISO8601String("20040314T102531.123+0830", true));
-
- Console.WriteLine("\n2004-03-14 = {0}", DateUtils.FromISO8601String("2004-03-14", true));
- Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", true));
- Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", true));
- Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", true));
- Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.123", true));
- Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", true));
- Console.WriteLine("2004-03-14T10:25:31-04 = {0}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31-04", true));
- Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", true));
+ Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", true));
+ Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", true));
+ Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", true));
+ Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", true));
+ Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.123", true));
+ Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.98Z", true));
+ Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", true));
+ Console.WriteLine("20180314T102531.123+0830 = {0}",
+ DateUtils.FromISO8601String("20180314T102531.123+0830", true));
+
+ Console.WriteLine("\n2018-03-14 = {0}", DateUtils.FromISO8601String("2018-03-14", true));
+ Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", true));
+ Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", true));
+ Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", true));
+ Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.123", true));
+ Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", true));
+ Console.WriteLine("2018-03-14T10:25:31-04 = {0}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31-04", true));
+ Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", true));
TimeSpan ts = DateUtils.FromISO8601TimeZone("+08");
@@ -545,18 +547,19 @@ static void Main(string[] args)
Console.WriteLine("Holidays saved to Holidays.xml");
}
-
+#if NETFramework
+ // The SOAP formatter is only supported on the full .NET Framework
// SOAP
using(var fs = new FileStream("Holidays.soap", FileMode.Create))
{
- SoapFormatter sf = new SoapFormatter();
+ var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
// SOAP doesn't support generics directly so use an array
sf.Serialize(fs, holidays.ToArray());
Console.WriteLine("Holidays saved to Holidays.soap");
}
-
+#endif
// Binary
using(var fs = new FileStream("Holidays.bin", FileMode.Create))
{
@@ -592,18 +595,18 @@ static void Main(string[] args)
Console.WriteLine("Holidays retrieved from Holidays.xml");
}
-
+#if NETFramework
// SOAP
using(var fs = new FileStream("Holidays.soap", FileMode.Open))
{
- SoapFormatter sf = new SoapFormatter();
+ var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
// As noted, SOAP doesn't support generics to an array is used instead
holidays = new HolidayCollection((Holiday[])sf.Deserialize(fs));
Console.WriteLine("Holidays retrieved from Holidays.soap");
}
-
+#endif
// Binary
using(var fs = new FileStream("Holidays.bin", FileMode.Open))
{
@@ -710,16 +713,16 @@ static void Main(string[] args)
Console.WriteLine("Recurrence saved to Recurrence.xml");
}
-
+#if NETFramework
// SOAP
using(var fs = new FileStream("Recurrence.soap", FileMode.Create))
{
- SoapFormatter sf = new SoapFormatter();
+ var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
sf.Serialize(fs, rRecur);
Console.WriteLine("Recurrence saved to Recurrence.soap");
}
-
+#endif
// Binary
using(var fs = new FileStream("Recurrence.bin", FileMode.Create))
{
@@ -755,16 +758,16 @@ static void Main(string[] args)
Console.WriteLine("Recurrence restored from Recurrence.xml");
}
-
+#if NETFramework
// SOAP
using(var fs = new FileStream("Recurrence.soap", FileMode.Open))
{
- SoapFormatter sf = new SoapFormatter();
+ var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
rRecur = (Recurrence)sf.Deserialize(fs);
Console.WriteLine("Recurrence retrieved from Recurrence.soap");
}
-
+#endif
// Binary
using(var fs = new FileStream("Recurrence.bin", FileMode.Open))
{
diff --git a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj
index 69db796..c3927b8 100644
--- a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj
+++ b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj
@@ -1,158 +1,27 @@
-
-
+
+
- Local
- 8.0.50727
- 2.0
- {98E6C0BF-CDA6-436B-9B9B-C1EB435F0FD8}
- Debug
- AnyCPU
- App.ico
-
-
- PDIDatesTest
- PDIDatesTest.snk
- JScript
- Grid
- IE50
- false
Exe
- PDIDatesTest
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\Debug\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
-
-
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- ..\..\EWSPDIDemos.ruleset
-
-
- bin\Release\
- false
- 285212672
- false
-
-
- TRACE
-
-
- false
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- none
- prompt
-
-
+ netcoreapp2.1
+ False
+ False
+ False
+ False
+ False
+ False
+ ProductAttribute
+ PDIDatesTest.snk
true
+ ..\..\EWSPDIDemos.ruleset
+ false
+
-
- System
-
-
- System.Runtime.Serialization.Formatters.Soap
-
-
- System.XML
-
-
-
-
-
- Properties\AssemblyInfoShared.cs
-
-
-
- Code
-
-
- Code
-
-
-
-
-
-
-
-
+
+
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
+
-
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs b/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs
index 38a007e..2d7ab10 100644
--- a/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs
+++ b/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/29/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/19/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Visual C#
//
// Assembly information for the demo application
diff --git a/Source/CSharpDemos/PDIDatesTest/app.config b/Source/CSharpDemos/PDIDatesTest/app.config
deleted file mode 100644
index 835290f..0000000
--- a/Source/CSharpDemos/PDIDatesTest/app.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/Source/CSharpDemos/PDIParserTest/App.ico b/Source/CSharpDemos/PDIParserTest/App.ico
deleted file mode 100644
index 3a5525f..0000000
Binary files a/Source/CSharpDemos/PDIParserTest/App.ico and /dev/null differ
diff --git a/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs b/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs
index 01e5713..8e735f1 100644
--- a/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs
+++ b/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : PDIParserTest.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/24/2014
-// Note : Copyright 2003-2014, Eric Woodruff, All rights reserved
+// Updated : 11/19/2018
+// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved
// Compiler: Visual C#
//
// This is just a quick test of the PDI vCard and calendar parser classes in a console mode application
@@ -19,6 +19,8 @@
// 08/19/2007 EFW Added support for vNote files
//===============================================================================================================
+// Ignore Spelling: iso
+
using System;
using System.IO;
using System.Text;
@@ -45,11 +47,10 @@ static void Main(string[] args)
{
string outputFolder, outputFile;
- if(args.GetUpperBound(0) < 1)
+ if(args.Length != 2)
{
- Console.WriteLine("Specify a folder name containing PDI files and a different one for the " +
- "output files.");
- return;
+ Console.WriteLine("Using files from .\\PDIFiles for the test\r\n");
+ args = new[] { @"..\..\..\..\..\..\PDIFiles", @"..\..\..\..\..\..\PDIFiles_Copy" };
}
try
diff --git a/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj b/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj
index fcb2356..6c1bae5 100644
--- a/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj
+++ b/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj
@@ -1,155 +1,28 @@
-
-
+
+
- Local
- 8.0.50727
- 2.0
- {7F445FE2-DE5A-45CA-BC6A-FA162CFA99CC}
- Debug
- AnyCPU
- App.ico
-
-
- PDIParserTest
- PDIParserTest.snk
- JScript
- Grid
- IE50
- false
Exe
- PDIParserTest
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\Debug\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
-
-
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- ..\..\EWSPDIDemos.ruleset
-
-
- bin\Release\
- false
- 285212672
- false
-
-
- TRACE
-
-
- false
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- none
- prompt
-
-
+ netcoreapp2.1
+ False
+ False
+ False
+ False
+ False
+ False
+ ProductAttribute
+ PDIParserTest.snk
true
+ ..\..\EWSPDIDemos.ruleset
+ false
+
-
- System
-
-
-
-
-
- Properties\AssemblyInfoShared.cs
-
-
- Code
-
-
- Code
-
-
-
-
-
-
-
-
+
+
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
+
+
-
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
-
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs b/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs
index c6902fd..8e3ead3 100644
--- a/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs
+++ b/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/29/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/19/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Visual C#
//
// Assembly information for the demo application
diff --git a/Source/CSharpDemos/PDIParserTest/app.config b/Source/CSharpDemos/PDIParserTest/app.config
deleted file mode 100644
index 835290f..0000000
--- a/Source/CSharpDemos/PDIParserTest/app.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs b/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs
index 5bcf281..df6334a 100644
--- a/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs
+++ b/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : Global.asax.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/29/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/21/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// At application start up, a common set of time zones is loaded into the VCalendar.TimeZones collection and a
@@ -48,7 +48,7 @@ protected void Application_Start(Object sender, EventArgs e)
// as multiple sessions may try to access it at the same time. The parser will acquire a write
// lock if it needs to merge a time zone component but since we are loading many time zones at
// once, we'll lock it now.
- VCalendar.TimeZones.Lock.AcquireWriterLock(250);
+ VCalendar.TimeZones.AcquireWriterLock(250);
try
{
@@ -62,7 +62,7 @@ protected void Application_Start(Object sender, EventArgs e)
}
finally
{
- VCalendar.TimeZones.Lock.ReleaseWriterLock();
+ VCalendar.TimeZones.ReleaseWriterLock();
}
}
diff --git a/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs b/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs
index c7c00d8..5018d90 100644
--- a/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs
+++ b/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : EventRecurTestForm.aspx.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/31/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/21/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// This page is used to demonstrate recurrence with the calendar components
@@ -43,7 +43,7 @@ protected void Page_Load(object sender, EventArgs e)
// The time zone information is loaded in the Application_Start event in Global.asax. We'll
// acquire a reader lock on the time zone collection as it's possible other sessions could be
// parsing calendars with time zone data that could change the collection.
- VCalendar.TimeZones.Lock.AcquireReaderLock(250);
+ VCalendar.TimeZones.AcquireReaderLock(250);
try
{
@@ -54,7 +54,7 @@ protected void Page_Load(object sender, EventArgs e)
}
finally
{
- VCalendar.TimeZones.Lock.ReleaseReaderLock();
+ VCalendar.TimeZones.ReleaseReaderLock();
}
// Set up some defaults for testing
diff --git a/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics b/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics
index 642a946..814850c 100644
--- a/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics
+++ b/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics
@@ -2,12 +2,21 @@ BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//EWSoftware//PDI Class Library//EN
BEGIN:VTIMEZONE
-TZID:(UTC) Casablanca
+TZID:(UTC) Coordinated Universal Time
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:Coordinated Universal Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+00:00) Casablanca
BEGIN:STANDARD
DTSTART:19701025T030000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Morocco Standard Time
END:STANDARD
BEGIN:DAYLIGHT
@@ -19,16 +28,7 @@ TZNAME:Morocco Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC) Coordinated Universal Time
-BEGIN:STANDARD
-DTSTART:19700101T000000
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:Coordinated Universal Time
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VTIMEZONE
-TZID:(UTC) Dublin\, Edinburgh\, Lisbon\, London
+TZID:(UTC+00:00) Dublin\, Edinburgh\, Lisbon\, London
BEGIN:STANDARD
DTSTART:19701025T020000
TZOFFSETFROM:+0100
@@ -45,7 +45,7 @@ TZNAME:GMT Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC) Monrovia\, Reykjavik
+TZID:(UTC+00:00) Monrovia\, Reykjavik
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+0100
@@ -105,6 +105,23 @@ TZNAME:Romance Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+01:00) Sao Tome
+BEGIN:STANDARD
+DTSTART:19700105T010000
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:Sao Tome Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700105T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:Sao Tome Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+01:00) Sarajevo\, Skopje\, Warsaw\, Zagreb
BEGIN:STANDARD
DTSTART:19701025T030000
@@ -131,23 +148,6 @@ TZNAME:W. Central Africa Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+01:00) Windhoek
-BEGIN:STANDARD
-DTSTART:19700405T020000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-TZNAME:Namibia Standard Time
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700906T020000
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
-TZNAME:Namibia Daylight Time
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VTIMEZONE
TZID:(UTC+02:00) Amman
BEGIN:STANDARD
DTSTART:19701030T010000
@@ -194,25 +194,34 @@ BEGIN:DAYLIGHT
DTSTART:19700328T235959
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA
TZNAME:Middle East Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+02:00) Cairo
BEGIN:STANDARD
-DTSTART:19700924T235959
+DTSTART:19700101T000000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH
TZNAME:Egypt Standard Time
END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+02:00) Chisinau
+BEGIN:STANDARD
+DTSTART:19701025T030000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:E. Europe Standard Time
+END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700521T235959
+DTSTART:19700329T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=3TH
-TZNAME:Egypt Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:E. Europe Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -225,28 +234,28 @@ RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1TH
TZNAME:Syria Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700402T235959
+DTSTART:19700327T000000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1TH
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR
TZNAME:Syria Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+02:00) E. Europe
+TZID:(UTC+02:00) Gaza\, Hebron
BEGIN:STANDARD
-DTSTART:19701025T030000
+DTSTART:19701031T010000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:E. Europe Standard Time
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA
+TZNAME:West Bank Gaza Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700329T020000
+DTSTART:19700328T010000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-TZNAME:E. Europe Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA
+TZNAME:West Bank Gaza Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -276,23 +285,6 @@ TZNAME:FLE Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+02:00) Istanbul
-BEGIN:STANDARD
-DTSTART:19701025T040000
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Turkey Standard Time
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700330T030000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1MO
-TZNAME:Turkey Daylight Time
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VTIMEZONE
TZID:(UTC+02:00) Jerusalem
BEGIN:STANDARD
DTSTART:19701025T020000
@@ -305,26 +297,27 @@ BEGIN:DAYLIGHT
DTSTART:19700327T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4FR
TZNAME:Jerusalem Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+02:00) Kaliningrad (RTZ 1)
+TZID:(UTC+02:00) Kaliningrad
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 1 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 1 Daylight Time
-END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+02:00) Khartoum
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:Sudan Standard Time
+END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+02:00) Tripoli
@@ -336,6 +329,15 @@ TZNAME:Libya Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+02:00) Windhoek
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:Namibia Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+03:00) Baghdad
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -345,6 +347,15 @@ TZNAME:Arabic Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+03:00) Istanbul
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:Turkey Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+03:00) Kuwait\, Riyadh
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -363,21 +374,13 @@ TZNAME:Belarus Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd (RTZ 2)
+TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 2 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 2 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+03:00) Nairobi
@@ -391,17 +394,17 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+03:30) Tehran
BEGIN:STANDARD
-DTSTART:19700921T235959
+DTSTART:19700918T235959
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3FR
TZNAME:Iran Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700321T235959
+DTSTART:19700326T000000
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SA
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4TH
TZNAME:Iran Daylight Time
END:DAYLIGHT
END:VTIMEZONE
@@ -415,24 +418,25 @@ TZNAME:Arabian Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+04:00) Astrakhan\, Ulyanovsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:Astrakhan Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+04:00) Baku
BEGIN:STANDARD
-DTSTART:19701025T050000
+DTSTART:19700101T000000
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Azerbaijan Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700329T040000
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-TZNAME:Azerbaijan Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+04:00) Izhevsk\, Samara (RTZ 3)
+TZID:(UTC+04:00) Izhevsk\, Samara
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+0500
@@ -450,6 +454,15 @@ TZNAME:Mauritius Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+04:00) Saratov
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:Saratov Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+04:00) Tbilisi
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -486,21 +499,13 @@ TZNAME:West Asia Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+05:00) Ekaterinburg (RTZ 4)
+TZID:(UTC+05:00) Ekaterinburg
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 4 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 4 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+05:00) Islamabad\, Karachi
@@ -557,21 +562,13 @@ TZNAME:Bangladesh Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+06:00) Novosibirsk (RTZ 5)
+TZID:(UTC+06:00) Omsk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Russia TZ 5 Standard Time
+TZNAME:Omsk Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 5 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+06:30) Yangon (Rangoon)
@@ -592,21 +589,49 @@ TZNAME:SE Asia Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+07:00) Krasnoyarsk (RTZ 6)
+TZID:(UTC+07:00) Barnaul\, Gorno-Altaysk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:Altai Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Hovd
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:W. Mongolia Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Krasnoyarsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 6 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 6 Daylight Time
-END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Novosibirsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:Novosibirsk Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Tomsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:Tomsk Standard Time
+END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+08:00) Beijing\, Chongqing\, Hong Kong\, Urumqi
@@ -618,21 +643,13 @@ TZNAME:China Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+08:00) Irkutsk (RTZ 7)
+TZID:(UTC+08:00) Irkutsk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 7 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 7 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+08:00) Kuala Lumpur\, Singapore
@@ -671,6 +688,24 @@ TZNAME:Ulaanbaatar Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+08:45) Eucla
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0945
+TZOFFSETTO:+0845
+TZNAME:Aus Central W. Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+09:00) Chita
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:Transbaikal Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+09:00) Osaka\, Sapporo\, Tokyo
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -680,6 +715,23 @@ TZNAME:Tokyo Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+09:00) Pyongyang
+BEGIN:STANDARD
+DTSTART:19700501T233000
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1FR
+TZNAME:North Korea Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700105T000000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:North Korea Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+09:00) Seoul
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -689,21 +741,13 @@ TZNAME:Korea Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+09:00) Yakutsk (RTZ 8)
+TZID:(UTC+09:00) Yakutsk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 8 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 8 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+09:30) Adelaide
@@ -784,41 +828,42 @@ TZNAME:Tasmania Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+10:00) Magadan
+TZID:(UTC+10:00) Vladivostok
BEGIN:STANDARD
-DTSTART:19701025T020000
-TZOFFSETFROM:+1200
+DTSTART:19700101T000000
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Magadan Standard Time
+TZNAME:Russia TZ 9 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1200
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Magadan Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+10:00) Vladivostok\, Magadan (RTZ 9)
+TZID:(UTC+10:30) Lord Howe Island
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700405T020000
TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Russia TZ 9 Standard Time
+TZOFFSETTO:+1030
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZNAME:Lord Howe Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+1000
+DTSTART:19701004T020000
+TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 9 Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+TZNAME:Lord Howe Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+11:00) Chokurdakh (RTZ 10)
+TZID:(UTC+11:00) Bougainville Island
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Bougainville Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Chokurdakh
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+1200
@@ -827,6 +872,33 @@ TZNAME:Russia TZ 10 Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Magadan
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Magadan Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Norfolk Island
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Norfolk Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Sakhalin
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Sakhalin Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+11:00) Solomon Is.\, New Caledonia
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -836,7 +908,7 @@ TZNAME:Central Pacific Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky (RTZ 11)
+TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+1300
@@ -873,10 +945,10 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+12:00) Fiji
BEGIN:STANDARD
-DTSTART:19700118T020000
+DTSTART:19700111T030000
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=3SU
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=2SU
TZNAME:Fiji Standard Time
END:STANDARD
BEGIN:DAYLIGHT
@@ -905,6 +977,32 @@ TZNAME:Kamchatka Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+12:45) Chatham Islands
+BEGIN:STANDARD
+DTSTART:19700405T034500
+TZOFFSETFROM:+1345
+TZOFFSETTO:+1245
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZNAME:Chatham Islands Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700927T024500
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+TZNAME:Chatham Islands Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+13:00) Coordinated Universal Time+13
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+TZNAME:UTC+13
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+13:00) Nuku'alofa
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -916,14 +1014,14 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+13:00) Samoa
BEGIN:STANDARD
-DTSTART:19700405T010000
+DTSTART:19700405T040000
TZOFFSETFROM:+1400
TZOFFSETTO:+1300
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
TZNAME:Samoa Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700927T000000
+DTSTART:19700927T030000
TZOFFSETFROM:+1300
TZOFFSETTO:+1400
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
@@ -992,6 +1090,15 @@ TZNAME:Mid-Atlantic Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-03:00) Araguaina
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:Tocantins Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-03:00) Brasilia
BEGIN:STANDARD
DTSTART:19700221T235959
@@ -1001,29 +1108,29 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA
TZNAME:E. South America Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19701017T235959
+DTSTART:19701107T235959
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA
TZNAME:E. South America Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-03:00) Buenos Aires
+TZID:(UTC-03:00) Cayenne\, Fortaleza
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:Argentina Standard Time
+TZNAME:SA Eastern Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-03:00) Cayenne\, Fortaleza
+TZID:(UTC-03:00) City of Buenos Aires
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:SA Eastern Standard Time
+TZNAME:Argentina Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -1039,25 +1146,43 @@ BEGIN:DAYLIGHT
DTSTART:19700328T220000
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA
TZNAME:Greenland Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC-03:00) Montevideo
BEGIN:STANDARD
-DTSTART:19700308T020000
+DTSTART:19700101T000000
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZNAME:Montevideo Standard Time
END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-03:00) Punta Arenas
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:Magallanes Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-03:00) Saint Pierre and Miquelon
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Saint Pierre Standard Time
+END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19701004T020000
+DTSTART:19700308T020000
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-TZNAME:Montevideo Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Saint Pierre Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -1121,6 +1246,15 @@ TZNAME:Atlantic Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-04:00) Caracas
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:Venezuela Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-04:00) Cuiaba
BEGIN:STANDARD
DTSTART:19700221T235959
@@ -1130,10 +1264,10 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA
TZNAME:Central Brazilian Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19701017T235959
+DTSTART:19701107T235959
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA
TZNAME:Central Brazilian Daylight Time
END:DAYLIGHT
END:VTIMEZONE
@@ -1149,36 +1283,36 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC-04:00) Santiago
BEGIN:STANDARD
-DTSTART:19700425T235959
+DTSTART:19700509T235959
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SA
+RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA
TZNAME:Pacific SA Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700905T235959
+DTSTART:19700808T235959
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA
+RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA
TZNAME:Pacific SA Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-04:30) Caracas
+TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco
BEGIN:STANDARD
DTSTART:19700101T000000
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0430
-TZNAME:Venezuela Standard Time
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:SA Pacific Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco
+TZID:(UTC-05:00) Chetumal
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:SA Pacific Standard Time
+TZNAME:Eastern Standard Time (Mexico)
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -1199,6 +1333,40 @@ TZNAME:Eastern Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-05:00) Haiti
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Haiti Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700308T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Haiti Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-05:00) Havana
+BEGIN:STANDARD
+DTSTART:19701101T010000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Cuba Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700308T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Cuba Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-05:00) Indiana (East)
BEGIN:STANDARD
DTSTART:19701101T020000
@@ -1216,6 +1384,23 @@ TZNAME:US Eastern Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-05:00) Turks and Caicos
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Turks and Caicos Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700105T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:Turks and Caicos Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-06:00) Central America
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -1242,6 +1427,23 @@ TZNAME:Central Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-06:00) Easter Island
+BEGIN:STANDARD
+DTSTART:19700509T220000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA
+TZNAME:Easter Island Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700808T220000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA
+TZNAME:Easter Island Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-06:00) Guadalajara\, Mexico City\, Monterrey
BEGIN:STANDARD
DTSTART:19701025T020000
@@ -1313,21 +1515,30 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC-08:00) Baja California
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19701101T020000
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZNAME:Pacific Standard Time (Mexico)
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700405T020000
+DTSTART:19700308T020000
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZNAME:Pacific Daylight Time (Mexico)
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-08:00) Coordinated Universal Time-08
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:UTC-08
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-08:00) Pacific Time (US & Canada)
BEGIN:STANDARD
DTSTART:19701101T020000
@@ -1362,6 +1573,41 @@ TZNAME:Alaskan Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-09:00) Coordinated Universal Time-09
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:UTC-09
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-09:30) Marquesas Islands
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0830
+TZOFFSETTO:-0930
+TZNAME:Marquesas Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-10:00) Aleutian Islands
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Aleutian Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700308T020000
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Aleutian Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-10:00) Hawaii
BEGIN:STANDARD
DTSTART:19700101T000000
diff --git a/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs b/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs
index f6c2f7e..b2f0fd0 100644
--- a/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs
+++ b/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : VTimeZoneTestForm.aspx.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/30/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/21/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// This page is used to demonstrate some of the time zone features of the PDI classes
@@ -42,7 +42,7 @@ protected void Page_Load(object sender, EventArgs e)
// The time zone information is loaded in the Application_Start event in Global.asax. We'll
// acquire a reader lock on the time zone collection as it's possible other sessions could be
// parsing calendars with time zone data that could change the collection.
- VCalendar.TimeZones.Lock.AcquireReaderLock(250);
+ VCalendar.TimeZones.AcquireReaderLock(250);
try
{
@@ -54,7 +54,7 @@ protected void Page_Load(object sender, EventArgs e)
}
finally
{
- VCalendar.TimeZones.Lock.ReleaseReaderLock();
+ VCalendar.TimeZones.ReleaseReaderLock();
}
txtSourceDate.Text = new DateTime(DateTime.Today.Year, 1, 1, 10, 0, 0).ToString("G");
diff --git a/Source/CSharpDemos/PDIWebDemoCS/Web.config b/Source/CSharpDemos/PDIWebDemoCS/Web.config
index 84853db..b08f825 100644
--- a/Source/CSharpDemos/PDIWebDemoCS/Web.config
+++ b/Source/CSharpDemos/PDIWebDemoCS/Web.config
@@ -1,27 +1,35 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh
index 459d1a6..9002601 100644
Binary files a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh and b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh differ
diff --git a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Web.Controls.dll.refresh b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Web.Controls.dll.refresh
deleted file mode 100644
index 4acbfb0..0000000
Binary files a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Web.Controls.dll.refresh and /dev/null differ
diff --git a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh
index dc27aeb..962275b 100644
Binary files a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh and b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh differ
diff --git a/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo b/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo
index 0ce07bc..dccbd2e 100644
--- a/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo
+++ b/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo
@@ -141,6 +141,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj b/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj
index 5d17cb3..339c601 100644
--- a/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj
+++ b/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj
@@ -1,5 +1,5 @@
-
+
Local
8.0.50727
@@ -26,7 +26,7 @@
3.5
- v4.0
+ v4.7.2
publish\
true
@@ -67,6 +67,7 @@
full
prompt
..\..\EWSPDIDemos.ruleset
+ false
bin\Release\
@@ -90,10 +91,14 @@
4
none
prompt
+ false
true
+
+ app.manifest
+
System
@@ -192,6 +197,7 @@
+
@@ -212,17 +218,17 @@
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
+
+ {5eda55cb-e991-4c50-93cb-149d7c4d498c}
+ EWSoftware.PDI.Data
-
- {dbd186a2-8160-4bf3-92d4-61bf262f0ca2}
- EWSPDIWinForms
+
+ {af3e8bed-a706-4c25-8379-2882641a221a}
+ EWSoftware.PDI.Windows.Forms
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
+
+ {024821de-3508-476a-97e7-441334a1b2df}
+ EWSoftware.PDI
diff --git a/Source/CSharpDemos/PDIWinFormsTest/app.config b/Source/CSharpDemos/PDIWinFormsTest/app.config
index 835290f..047b3b0 100644
--- a/Source/CSharpDemos/PDIWinFormsTest/app.config
+++ b/Source/CSharpDemos/PDIWinFormsTest/app.config
@@ -1,6 +1,9 @@
-
+
+
+
+
diff --git a/Source/CSharpDemos/PDIWinFormsTest/app.manifest b/Source/CSharpDemos/PDIWinFormsTest/app.manifest
new file mode 100644
index 0000000..e0f5061
--- /dev/null
+++ b/Source/CSharpDemos/PDIWinFormsTest/app.manifest
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/CSharpDemos/RFC2445RecurTest/App.ico b/Source/CSharpDemos/RFC2445RecurTest/App.ico
deleted file mode 100644
index 3a5525f..0000000
Binary files a/Source/CSharpDemos/RFC2445RecurTest/App.ico and /dev/null differ
diff --git a/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs b/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs
index 2deebc9..e87422b 100644
--- a/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs
+++ b/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/29/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/20/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Visual C#
//
// Assembly information for the demo application
diff --git a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs
index 30a2a09..1833a28 100644
--- a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs
+++ b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs
@@ -2,8 +2,8 @@
// System : EWSoftware PDI Demonstration Applications
// File : RFC2445RecurTest.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 12/24/2014
-// Note : Copyright 2003-2014, Eric Woodruff, All rights reserved
+// Updated : 11/20/2018
+// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved
// Compiler: Visual C#
//
// This creates the example recurrence patterns given in the RFC 2445 iCalendar specification starting on page
diff --git a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj
index fe7af56..1107b8c 100644
--- a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj
+++ b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj
@@ -1,159 +1,28 @@
-
-
+
+
- Local
- 8.0.50727
- 2.0
- {32D480E1-5E35-46E8-8682-02EB5D3FC3DC}
- Debug
- AnyCPU
- App.ico
-
-
- RFC2445RecurTest
- RCS2445RecurTest.snk
- JScript
- Grid
- IE50
- false
Exe
- RFC2445RecurTest
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\Debug\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
-
-
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- ..\..\EWSPDIDemos.ruleset
-
-
- bin\Release\
- false
- 285212672
- false
-
-
- TRACE
-
-
- false
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- none
- prompt
-
-
+ netcoreapp2.1
+ False
+ False
+ False
+ False
+ False
+ False
+ ProductAttribute
+ RFC2445RecurTest.snk
true
+ ..\..\EWSPDIDemos.ruleset
+ false
+
-
- System
-
-
- System.XML
-
-
-
-
-
- Properties\AssemblyInfoShared.cs
-
-
-
- Code
-
-
- Code
-
+
+
-
+
+
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
-
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/Source/CSharpDemos/RFC2445RecurTest/RCS2445RecurTest.snk b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.snk
similarity index 100%
rename from Source/CSharpDemos/RFC2445RecurTest/RCS2445RecurTest.snk
rename to Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.snk
diff --git a/Source/CSharpDemos/RFC2445RecurTest/app.config b/Source/CSharpDemos/RFC2445RecurTest/app.config
deleted file mode 100644
index 835290f..0000000
--- a/Source/CSharpDemos/RFC2445RecurTest/app.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/Source/CSharpDemos/vCardBrowser/PhotoControl.cs b/Source/CSharpDemos/vCardBrowser/PhotoControl.cs
index 622196c..fe6baf6 100644
--- a/Source/CSharpDemos/vCardBrowser/PhotoControl.cs
+++ b/Source/CSharpDemos/vCardBrowser/PhotoControl.cs
@@ -107,7 +107,7 @@ public string ImageFilename
{
bmImage.Dispose();
- if(!String.IsNullOrEmpty(value))
+ if(!String.IsNullOrWhiteSpace(value))
bmImage = new Bitmap(value);
else
bmImage = new Bitmap(1, 1);
diff --git a/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs b/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs
index 74e900c..4d099ee 100644
--- a/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs
+++ b/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.34209
+// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -19,7 +19,7 @@ namespace vCardBrowser.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/Source/CSharpDemos/vCardBrowser/app.config b/Source/CSharpDemos/vCardBrowser/app.config
index 835290f..75f0734 100644
--- a/Source/CSharpDemos/vCardBrowser/app.config
+++ b/Source/CSharpDemos/vCardBrowser/app.config
@@ -1,6 +1,9 @@
-
+
+
+
+
diff --git a/Source/CSharpDemos/vCardBrowser/app.manifest b/Source/CSharpDemos/vCardBrowser/app.manifest
new file mode 100644
index 0000000..5dbcd41
--- /dev/null
+++ b/Source/CSharpDemos/vCardBrowser/app.manifest
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj b/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj
index 9e4de41..e34fcf8 100644
--- a/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj
+++ b/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj
@@ -1,5 +1,5 @@
-
+
Local
8.0.50727
@@ -26,7 +26,7 @@
3.5
- v4.0
+ v4.7.2
false
publish\
@@ -96,6 +96,9 @@
true
+
+ app.manifest
+
System
@@ -220,6 +223,7 @@
+
@@ -240,17 +244,17 @@
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
+
+ {5eda55cb-e991-4c50-93cb-149d7c4d498c}
+ EWSoftware.PDI.Data
-
- {dbd186a2-8160-4bf3-92d4-61bf262f0ca2}
- EWSPDIWinForms
+
+ {af3e8bed-a706-4c25-8379-2882641a221a}
+ EWSoftware.PDI.Windows.Forms
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
+
+ {024821de-3508-476a-97e7-441334a1b2df}
+ EWSoftware.PDI
diff --git a/Source/EWSPDI.ruleset b/Source/EWSPDI.ruleset
index c5ddaf1..bdf20b3 100644
--- a/Source/EWSPDI.ruleset
+++ b/Source/EWSPDI.ruleset
@@ -1,5 +1,5 @@
-
+
@@ -19,6 +19,7 @@
+
@@ -29,4 +30,7 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/Source/EWSPDI.sln b/Source/EWSPDI.sln
index 7714824..16891ef 100644
--- a/Source/EWSPDI.sln
+++ b/Source/EWSPDI.sln
@@ -2,35 +2,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2002
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDI", "EWSPDI\EWSPDI.csproj", "{23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWinForms", "EWSPDIWinForms\EWSPDIWinForms.csproj", "{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}"
- ProjectSection(ProjectDependencies) = postProject
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F} = {13EB4641-36A6-4C9C-AF8C-29F3763D392F}
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C} = {7AAC8160-1975-47A2-A171-4C335E5A6C8C}
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} = {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIData", "EWSPDIData\EWSPDIData.csproj", "{13EB4641-36A6-4C9C-AF8C-29F3763D392F}"
- ProjectSection(ProjectDependencies) = postProject
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} = {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWeb", "EWSPDIWeb\EWSPDIWeb.csproj", "{7AAC8160-1975-47A2-A171-4C335E5A6C8C}"
- ProjectSection(ProjectDependencies) = postProject
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} = {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- EndProjectSection
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5282D624-0EA3-4F39-939A-E5DFB8EAF3A8}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
EWSPDI.ruleset = EWSPDI.ruleset
EndProjectSection
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{046CA387-A517-4922-9B8E-D5C1854F6194}"
- ProjectSection(SolutionItems) = preProject
- .nuget\NuGet.Config = .nuget\NuGet.Config
- EndProjectSection
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI", "EWSPDI\EWSoftware.PDI.csproj", "{FAB2E594-F7C2-4677-99F6-6F9717174DA3}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Data", "EWSPDIData\EWSoftware.PDI.Data.csproj", "{C5E24454-D754-4A09-874A-12ABEA8C6105}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Web.Controls", "EWSPDIWeb\EWSoftware.PDI.Web.Controls.csproj", "{66F7E06E-48A0-4DBF-99FE-560674B9C91F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Windows.Forms", "EWSPDIWinForms\EWSoftware.PDI.Windows.Forms.csproj", "{7A46908F-DB3F-4F75-B6D8-529E27E3B045}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSoftware.PDI.WinForms.Design", "EWSPDIWinForms\EWSoftware.PDI.WinForms.Design.csproj", "{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -38,22 +24,24 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5E24454-D754-4A09-874A-12ABEA8C6105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5E24454-D754-4A09-874A-12ABEA8C6105}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5E24454-D754-4A09-874A-12ABEA8C6105}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5E24454-D754-4A09-874A-12ABEA8C6105}.Release|Any CPU.Build.0 = Release|Any CPU
+ {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Release|Any CPU.Build.0 = Release|Any CPU
{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.Build.0 = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.Build.0 = Release|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Source/EWSPDI/Duration.cs b/Source/EWSPDI/Duration.cs
index 74c9672..8143565 100644
--- a/Source/EWSPDI/Duration.cs
+++ b/Source/EWSPDI/Duration.cs
@@ -301,7 +301,7 @@ public Duration(string duration)
int years = 0, months = 0, weeks = 0, days = 0, hours = 0, minutes = 0, seconds = 0;
// If null or empty, default to zero
- if(String.IsNullOrEmpty(duration))
+ if(String.IsNullOrWhiteSpace(duration))
{
ts = TimeSpan.Zero;
return;
diff --git a/Source/EWSPDI/EWSPDI.csproj b/Source/EWSPDI/EWSPDI.csproj
deleted file mode 100644
index e49df3e..0000000
--- a/Source/EWSPDI/EWSPDI.csproj
+++ /dev/null
@@ -1,226 +0,0 @@
-
-
-
- Local
- 8.0.50727
- 2.0
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- Debug
- AnyCPU
-
-
-
-
- EWSoftware.PDI
- ..\EWSPDI.snk
- JScript
- Grid
- IE50
- false
- Library
- EWSoftware.PDI
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\Debug\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
- bin\Debug\EWSoftware.PDI.xml
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- ..\EWSPDI.ruleset
-
-
- bin\Release\
- false
- 285212672
- false
-
-
- TRACE
- bin\Release\EWSoftware.PDI.xml
- true
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- pdbonly
- prompt
-
-
- true
-
-
- bin\ReleaseNoDoc\
- TRACE
- 285212672
- bin\Release\EWSoftware.PDI.xml
- true
- 4096
- AnyCPU
- prompt
- false
- false
- false
- pdbonly
- true
-
-
-
- System
-
-
-
- System.XML
-
-
-
-
-
-
-
-
-
-
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
-
-
-
- Code
-
-
-
-
-
- Code
-
-
-
-
-
-
- Code
-
-
- Code
-
-
-
-
- Code
-
-
-
-
-
- Code
-
-
-
-
-
- Code
-
-
-
-
- Designer
-
-
- Designer
-
-
- EWSPDI.snk
-
-
-
- Recurrence.xsd
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Source/EWSPDI/EWSoftware.PDI.csproj b/Source/EWSPDI/EWSoftware.PDI.csproj
new file mode 100644
index 0000000..8276ee7
--- /dev/null
+++ b/Source/EWSPDI/EWSoftware.PDI.csproj
@@ -0,0 +1,51 @@
+
+
+
+ netstandard2.0;net40
+ True
+ true
+ Eric Woodruff
+ EWSoftware Personal Data Interchange Library
+ EWSoftware PDI Library
+ Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved
+ en
+ 2018.11.17.0
+ 18.11.17.0
+ This library contains the core set of useful Personal Data Interchange (PDI) and date utility classes for .NET applications. They can be used for calculating holiday dates, recurrences, etc. See the project website for the code, a help file, and demos.
+ Eric Woodruff
+ https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png
+ https://github.com/EWSoftware/PDI
+ git
+ PDI personal data interchange holiday calculation date recurrence RFC 2445
+ https://github.com/EWSoftware/PDI
+ https://github.com/EWSoftware/PDI/blob/master/LICENSE
+ Targets .NET 4.0 and .NET Standard 2.0 and later
+ true
+ False
+ False
+ False
+ False
+ ..\EWSPDI.snk
+ ..\EWSPDI.ruleset
+ false
+ pdbonly
+ true
+
+
+
+
+
+
+
+
+
+ true
+ \
+
+
+
+
+
+
+
+
diff --git a/Source/EWSPDI/Period.cs b/Source/EWSPDI/Period.cs
index 3b8b086..79a0ac3 100644
--- a/Source/EWSPDI/Period.cs
+++ b/Source/EWSPDI/Period.cs
@@ -149,7 +149,7 @@ public Period(Period period)
/// are not valid.
public Period(string period)
{
- if(String.IsNullOrEmpty(period))
+ if(String.IsNullOrWhiteSpace(period))
{
this.StartDateTime = DateTime.MinValue;
this.Duration = Duration.Zero;
diff --git a/Source/EWSPDI/Properties/AssemblyInfo.cs b/Source/EWSPDI/Properties/AssemblyInfo.cs
index f067348..2645f1c 100644
--- a/Source/EWSPDI/Properties/AssemblyInfo.cs
+++ b/Source/EWSPDI/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : Personal Data Interchange Classes
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 10/14/2014
-// Note : Copyright 2003-2013, Eric Woodruff, All rights reserved
+// Updated : 11/17/2018
+// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// PDI utility library assembly attributes
@@ -26,6 +26,5 @@
// General assembly information
[assembly: AssemblyTitle("Personal Data Interchange and Miscellaneous Date Utility Classes")]
-[assembly: AssemblyDescription("A set of useful Personal Data Interchange (PDI) and date utility classes")]
// See AssemblyInfoShared.cs for the shared attributes common to all projects in the solution
diff --git a/Source/EWSPDI/Properties/AssemblyInfoShared.cs b/Source/EWSPDI/Properties/AssemblyInfoShared.cs
index fa7c988..b4bfe2a 100644
--- a/Source/EWSPDI/Properties/AssemblyInfoShared.cs
+++ b/Source/EWSPDI/Properties/AssemblyInfoShared.cs
@@ -2,8 +2,8 @@
// System : Personal Data Interchange Classes
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 01/19/2015
-// Note : Copyright 2004-2015, Eric Woodruff, All rights reserved
+// Updated : 11/17/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// PDI library common assembly attributes
@@ -20,25 +20,17 @@
// 11/23/2004 EFW Fixed some problems with view state on dynamic image areas
// 06/28/2006 EFW Reworked code for use with .NET 2.0
// 07/05/2013 EFW Updated for use with .NET 4.0 and converted the project to open source
+// 11/17/2018 EFW Updated for use with .NET Standard 2.0
//===============================================================================================================
using System;
using System.Reflection;
-using System.Resources;
using System.Runtime.InteropServices;
// NOTE: See AssemblyInfo.cs for project-specific assembly attributes
// General assembly information
-[assembly: AssemblyProduct("EWSoftware Personal Data Interchange Library")]
-[assembly: AssemblyCompany("Eric Woodruff")]
-[assembly: AssemblyCopyright("Copyright \xA9 2003-2015, Eric Woodruff, All Rights Reserved")]
[assembly: AssemblyCulture("")]
-#if DEBUG
-[assembly: AssemblyConfiguration("Debug")]
-#else
-[assembly: AssemblyConfiguration("Release")]
-#endif
// The assembly is CLS compliant
[assembly: CLSCompliant(true)]
@@ -46,9 +38,6 @@
// Not visible to COM
[assembly: ComVisible(false)]
-// Resources contained within the assembly are English
-[assembly: NeutralResourcesLanguageAttribute("en")]
-
// Version numbers. All version numbers for an assembly consists of the following four values:
//
// Year of release
@@ -62,16 +51,16 @@
// This is used to set the assembly version in the strong name. This should remain unchanged to maintain binary
// compatibility with prior releases. It should only be changed if a breaking change is made that requires
// assemblies that reference older versions to be recompiled against the newer version.
-[assembly: AssemblyVersion("2015.1.19.0")]
+[assembly: AssemblyVersion("2018.11.17.0")]
// Common assembly file version
//
// This is used to set the assembly file version. This will change with each new release. MSIs only support a
// Major value between 0 and 255 so we drop the century from the year on this one.
-[assembly: AssemblyFileVersion("15.1.19.0")]
+[assembly: AssemblyFileVersion("18.11.17.0")]
// Common product version
//
// This may contain additional text to indicate Alpha or Beta states. The version number will always match the
// file version above but includes the century on the year.
-[assembly: AssemblyInformationalVersion("2015.1.19.0")]
+[assembly: AssemblyInformationalVersion("2018.11.17.0")]
diff --git a/NuGet/ReadMe_PDI.txt b/Source/EWSPDI/ReadMe.txt
similarity index 100%
rename from NuGet/ReadMe_PDI.txt
rename to Source/EWSPDI/ReadMe.txt
diff --git a/Source/EWSPDI/packages.config b/Source/EWSPDI/packages.config
deleted file mode 100644
index 80db5ca..0000000
--- a/Source/EWSPDI/packages.config
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Source/EWSPDIData/EWSPDIData.csproj b/Source/EWSPDIData/EWSPDIData.csproj
deleted file mode 100644
index 242063b..0000000
--- a/Source/EWSPDIData/EWSPDIData.csproj
+++ /dev/null
@@ -1,406 +0,0 @@
-
-
-
- Local
- 8.0.50727
- 2.0
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}
- Debug
- AnyCPU
-
-
-
-
- EWSoftware.PDI.Data
- ..\EWSPDI.snk
- JScript
- Grid
- IE50
- false
- Library
- EWSoftware.PDI
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\Debug\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
- bin\Debug\EWSoftware.PDI.Data.xml
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- ..\EWSPDI.ruleset
-
-
- bin\Release\
- false
- 285212672
- false
-
-
- TRACE
- bin\Release\EWSoftware.PDI.Data.xml
- true
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- pdbonly
- prompt
-
-
- true
-
-
- bin\ReleaseNoDoc\
- TRACE
- 285212672
- bin\Release\EWSoftware.PDI.Data.xml
- true
- 4096
- AnyCPU
- prompt
- true
-
-
-
- System
-
-
-
- System.XML
-
-
- EWSPDI
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
-
-
- Properties\AssemblyInfoShared.cs
-
-
-
- Code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Code
-
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
-
-
- Code
-
-
- Code
-
-
-
- Code
-
-
- Code
-
-
-
- Code
-
-
-
- Code
-
-
-
- Code
-
-
-
-
-
- Code
-
-
-
- Code
-
-
-
-
-
- Code
-
-
-
-
- Code
-
-
- Code
-
-
-
-
- Code
-
-
-
-
- Code
-
-
-
-
-
-
- Code
-
-
-
-
-
- Code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Code
-
-
-
- Code
-
-
- Code
-
-
- Code
-
-
-
- Code
-
-
- Code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
-
- Code
-
-
- Code
-
-
-
- Code
-
-
-
-
-
-
-
- Code
-
-
-
-
- Code
-
-
-
- Code
-
-
-
- Code
-
-
-
-
-
-
-
-
- Code
-
-
-
-
- Code
-
-
-
-
-
-
-
-
- Designer
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
- EWSPDI.snk
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Source/EWSPDIData/EWSoftware.PDI.Data.csproj b/Source/EWSPDIData/EWSoftware.PDI.Data.csproj
new file mode 100644
index 0000000..6bc5372
--- /dev/null
+++ b/Source/EWSPDIData/EWSoftware.PDI.Data.csproj
@@ -0,0 +1,53 @@
+
+
+
+ netstandard2.0;net40
+ True
+ true
+ Eric Woodruff
+ EWSoftware Personal Data Interchange Library
+ EWSoftware PDI Data Library
+ Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved
+ en
+ 2018.11.17.0
+ 18.11.17.0
+ This library contains classes used to create and consume vCard, vCalendar, and iCalendar files used to exchange contact and appointment information between applications such as Microsoft Outlook. See the project website for the code, a help file, and demos.
+ Eric Woodruff
+ https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png
+ https://github.com/EWSoftware/PDI
+ git
+ PDI personal data interchange vCard vCalendar iCalendar RFC 2426 2445
+ https://github.com/EWSoftware/PDI
+ https://github.com/EWSoftware/PDI/blob/master/LICENSE
+ Targets .NET 4.0 and .NET Standard 2.0 and later
+ true
+ False
+ False
+ False
+ False
+ ..\EWSPDI.snk
+ ..\EWSPDI.ruleset
+ false
+ pdbonly
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ \
+
+
+
+
+
+
+
diff --git a/Source/EWSPDIData/Data.PDIData.resx b/Source/EWSPDIData/PDIData.resx
similarity index 100%
rename from Source/EWSPDIData/Data.PDIData.resx
rename to Source/EWSPDIData/PDIData.resx
diff --git a/Source/EWSPDIData/PDIObjects/VCalendar.cs b/Source/EWSPDIData/PDIObjects/VCalendar.cs
index 29343c8..e5b363c 100644
--- a/Source/EWSPDIData/PDIObjects/VCalendar.cs
+++ b/Source/EWSPDIData/PDIObjects/VCalendar.cs
@@ -2,8 +2,8 @@
// System : Personal Data Interchange Classes
// File : VCalendar.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 11/06/2013
-// Note : Copyright 2004-2013, Eric Woodruff, All rights reserved
+// Updated : 11/20/2013
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// This file contains the definition for the vCalendar/iCalendar object.
@@ -24,6 +24,7 @@
using System;
using System.Globalization;
using System.IO;
+using System.Linq;
using System.Runtime.Serialization;
using System.Security;
using System.Text;
@@ -63,11 +64,6 @@ public class VCalendar : CalendarObject, ISerializable, IDisposable
// This is a catch-all that holds all unknown or extension properties
private CustomPropertyCollection customProps;
- // iCalendar only. It's also shared by all instances for a common source of time zone info. This also
- // saves us from having to introduce some method of letting the sub-objects like events know who their
- // containing calendar is in order to get a reference to a time zone collection.
- private static VTimeZoneCollection timeZones = new VTimeZoneCollection();
-
#endregion
#region Properties
@@ -77,10 +73,7 @@ public class VCalendar : CalendarObject, ISerializable, IDisposable
/// This is used to establish the specification versions supported by the PDI object
///
/// Supports vCalendar 1.0 and iCalendar 2.0
- public override SpecificationVersions VersionsSupported
- {
- get { return SpecificationVersions.vCalendar10 | SpecificationVersions.iCalendar20; }
- }
+ public override SpecificationVersions VersionsSupported => SpecificationVersions.vCalendar10 | SpecificationVersions.iCalendar20;
///
/// This is used to get the Product ID (PRODID) property
@@ -182,14 +175,15 @@ public DaylightProperty VCalendarDaylightRule
/// This is used to hold a set of time zone (VTIMEZONE) objects associated with calendars
///
/// If the returned collection is empty, there are no time zone items. This property is
- /// only /// applicable to iCalendar 2.0 objects.
+ /// only applicable to iCalendar 2.0 objects.
///
/// Note that all calendars share a common set of time zone information. Any time zone components
- /// parsed are added to this collection if they do not exist or are merged into existing entries.
- public static VTimeZoneCollection TimeZones
- {
- get { return timeZones; }
- }
+ /// parsed are added to this collection if they do not exist or, if they do, are merged into existing
+ /// entries. This serves as a common source of time zone info. It also saves us from having to
+ /// introduce some method of letting the sub-objects like events know who their containing calendar is in
+ /// order to get a reference to a time zone collection.
+ ///
+ public static VTimeZoneCollection TimeZones { get; } = new VTimeZoneCollection();
///
/// This is used to hold a set of event (VEVENT) objects associated with the calendar
@@ -283,15 +277,15 @@ public VCalendar()
// Subscribe to the TimeZoneIdChanged event on the Time Zones collection so that the calendar can
// update all owned objects with changes to time zone IDs.
- timeZones.Lock.AcquireWriterLock(250);
+ TimeZones.AcquireWriterLock(250);
try
{
- timeZones.TimeZoneIdChanged += tzid_TimeZoneIdChanged;
+ TimeZones.TimeZoneIdChanged += tzid_TimeZoneIdChanged;
}
finally
{
- timeZones.Lock.ReleaseWriterLock();
+ TimeZones.ReleaseWriterLock();
}
}
@@ -345,15 +339,15 @@ protected virtual void Dispose(bool disposing)
{
// There are no unmanaged resources in this class. Just disconnect the event handler if not done
// already.
- timeZones.Lock.AcquireWriterLock(250);
+ TimeZones.AcquireWriterLock(250);
try
{
- timeZones.TimeZoneIdChanged -= tzid_TimeZoneIdChanged;
+ TimeZones.TimeZoneIdChanged -= tzid_TimeZoneIdChanged;
}
finally
{
- timeZones.Lock.ReleaseWriterLock();
+ TimeZones.ReleaseWriterLock();
}
}
#endregion
@@ -478,7 +472,7 @@ public override void PropagateVersion()
if(freebusy != null)
freebusy.PropagateVersion(this.Version);
- timeZones.PropagateVersion(this.Version);
+ TimeZones.PropagateVersion(this.Version);
}
}
@@ -610,17 +604,17 @@ public override void WriteToStream(TextWriter tw, StringBuilder sb)
if(tzIds.Count != 0)
{
// Lock it while we write the collection out
- timeZones.Lock.AcquireReaderLock(250);
+ TimeZones.AcquireReaderLock(250);
try
{
- foreach(VTimeZone tz in timeZones)
+ foreach(VTimeZone tz in TimeZones)
if(tzIds.Contains(tz.TimeZoneId.Value))
tz.WriteToStream(tw, sb);
}
finally
{
- timeZones.Lock.ReleaseReaderLock();
+ TimeZones.ReleaseReaderLock();
}
}
@@ -655,9 +649,7 @@ public override void WriteToStream(TextWriter tw, StringBuilder sb)
/// Returns true if the object equals this instance, false if it does not
public override bool Equals(object obj)
{
- VCalendar c = obj as VCalendar;
-
- if(c == null)
+ if(!(obj is VCalendar c))
return false;
// The ToString() method returns a text representation of the calendar based on all of its settings
@@ -712,14 +704,19 @@ private static void FindRules(DateTime convertDate, string timeZoneId, bool useL
standardRule = daylightRule = null;
standardDate = dstDate = DateTime.MinValue;
- VTimeZone vtz = timeZones[timeZoneId];
+ VTimeZone vtz = TimeZones[timeZoneId];
if(vtz == null)
return;
// In order to calculate the correct time, we need the UTC offset for standard time locally
- TimeZone tzCurrent = TimeZone.CurrentTimeZone;
- TimeSpan tsUTC = tzCurrent.GetUtcOffset(tzCurrent.GetDaylightChanges(convertDate.Year).End);
+ TimeZoneInfo tzCurrent = TimeZoneInfo.Local;
+ var rule = tzCurrent.GetAdjustmentRules().FirstOrDefault(a => convertDate.Date >= a.DateStart &&
+ convertDate.Date <= a.DateEnd);
+ TimeSpan tsUTC = TimeSpan.Zero;
+
+ if(rule != null)
+ tsUTC = tzCurrent.GetUtcOffset(rule.DateEnd);
// Get the observance rules to use in the conversion
foreach(ObservanceRule or in vtz.ObservanceRules)
@@ -852,8 +849,6 @@ private static void FindRules(DateTime convertDate, string timeZoneId, bool useL
/// or the unmodified date/time if it cannot be found.
public static DateTime TimeZoneTimeToUtc(DateTime convertDate, string timeZoneId)
{
- ObservanceRule standardRule, daylightRule;
- DateTime standardDate, dstDate;
// We won't adjust values in year 1 or year 9999 as we could underflow or overflow the date/time
// object.
@@ -861,8 +856,8 @@ public static DateTime TimeZoneTimeToUtc(DateTime convertDate, string timeZoneId
return convertDate;
// Get the observance rules to use in the conversion
- FindRules(convertDate, timeZoneId, false, out standardRule, out daylightRule, out standardDate,
- out dstDate);
+ FindRules(convertDate, timeZoneId, false, out ObservanceRule standardRule, out ObservanceRule daylightRule,
+ out DateTime standardDate, out DateTime dstDate);
// If neither observance rule was found, use it as-is
if(standardRule == null && daylightRule == null)
@@ -921,8 +916,6 @@ public static DateTime TimeZoneTimeToUtc(DateTime convertDate, string timeZoneId
/// start date/time information and it has a zero length duration.
public static DateTimeInstance UtcToTimeZoneTime(DateTime convertDate, string timeZoneId)
{
- ObservanceRule standardRule, daylightRule;
- DateTime standardDate, dstDate;
TimeZoneNameProperty tzn;
DateTimeInstance dti = new DateTimeInstance(convertDate);
@@ -935,8 +928,8 @@ public static DateTimeInstance UtcToTimeZoneTime(DateTime convertDate, string ti
dti.TimeZoneId = timeZoneId;
// Get the observance rules to use in the conversion
- FindRules(convertDate.ToLocalTime(), timeZoneId, false, out standardRule, out daylightRule,
- out standardDate, out dstDate);
+ FindRules(convertDate.ToLocalTime(), timeZoneId, false, out ObservanceRule standardRule,
+ out ObservanceRule daylightRule, out DateTime standardDate, out DateTime dstDate);
// If neither observance rule was found, use it as-is
if(standardRule == null && daylightRule == null)
@@ -1043,9 +1036,6 @@ public static DateTimeInstance UtcToTimeZoneTime(DateTime convertDate, string ti
/// start date/time information and it has a zero length duration.
public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, string timeZoneId)
{
- ObservanceRule standardRule, daylightRule;
- DateTime standardDate, daylightDate;
-
DateTimeInstance dti = new DateTimeInstance(convertDate);
// We won't adjust values in year 1 or year 9999 as we could underflow or overflow the date/time
@@ -1054,8 +1044,8 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str
return dti;
// Get the observance rules to use in the conversion
- FindRules(convertDate, timeZoneId, false, out standardRule, out daylightRule, out standardDate,
- out daylightDate);
+ FindRules(convertDate, timeZoneId, false, out ObservanceRule standardRule,
+ out ObservanceRule daylightRule, out DateTime standardDate, out DateTime daylightDate);
// If neither observance rule was found, use it as-is
if(standardRule == null && daylightRule == null)
@@ -1076,13 +1066,13 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str
standardRule.OffsetFrom.TimeSpanValue.Negate()).ToLocalTime();
// Base the time zone name on the local time's DST setting
- if(TimeZone.CurrentTimeZone.IsDaylightSavingTime(dti.StartDateTime))
+ if(TimeZoneInfo.Local.IsDaylightSavingTime(dti.StartDateTime))
{
dti.StartIsDaylightSavingTime = dti.EndIsDaylightSavingTime = true;
- dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.DaylightName;
+ dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.DaylightName;
}
else
- dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.StandardName;
+ dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.StandardName;
return dti;
}
@@ -1106,13 +1096,13 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str
daylightRule.OffsetFrom.TimeSpanValue.Negate()).ToLocalTime();
// Base the time zone name on the local time's DST setting
- if(TimeZone.CurrentTimeZone.IsDaylightSavingTime(dti.StartDateTime))
+ if(TimeZoneInfo.Local.IsDaylightSavingTime(dti.StartDateTime))
{
dti.StartIsDaylightSavingTime = dti.EndIsDaylightSavingTime = true;
- dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.DaylightName;
+ dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.DaylightName;
}
else
- dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.StandardName;
+ dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.StandardName;
return dti;
}
@@ -1152,13 +1142,13 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str
}
// Base the time zone name on the local time's DST setting
- if(TimeZone.CurrentTimeZone.IsDaylightSavingTime(dti.StartDateTime))
+ if(TimeZoneInfo.Local.IsDaylightSavingTime(dti.StartDateTime))
{
dti.StartIsDaylightSavingTime = dti.EndIsDaylightSavingTime = true;
- dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.DaylightName;
+ dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.DaylightName;
}
else
- dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.StandardName;
+ dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.StandardName;
return dti;
}
@@ -1176,8 +1166,6 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str
/// start date/time information and it has a zero length duration.
public static DateTimeInstance LocalTimeToTimeZoneTime(DateTime convertDate, string timeZoneId)
{
- ObservanceRule standardRule, daylightRule;
- DateTime standardDate, daylightDate;
TimeZoneNameProperty tzn;
DateTimeInstance dti = new DateTimeInstance(convertDate);
@@ -1190,8 +1178,8 @@ public static DateTimeInstance LocalTimeToTimeZoneTime(DateTime convertDate, str
dti.TimeZoneId = timeZoneId;
// Get the observance rules to use in the conversion
- FindRules(convertDate, timeZoneId, true, out standardRule, out daylightRule, out standardDate,
- out daylightDate);
+ FindRules(convertDate, timeZoneId, true, out ObservanceRule standardRule, out ObservanceRule daylightRule,
+ out DateTime standardDate, out DateTime daylightDate);
// If neither observance rule was found, use it as-is
if(standardRule == null && daylightRule == null)
@@ -1299,7 +1287,7 @@ public static DateTimeInstance TimeZoneToTimeZone(DateTime convertDate, string s
DateTimeInstance dti;
// If one or both is not found, return it as-is
- if(timeZones[sourceId] == null || timeZones[destId] == null)
+ if(TimeZones[sourceId] == null || TimeZones[destId] == null)
dti = new DateTimeInstance(convertDate);
else
{
@@ -1323,8 +1311,6 @@ public static DateTimeInstance TimeZoneToTimeZone(DateTime convertDate, string s
/// start date/time information and it has a zero length duration.
public static DateTimeInstance TimeZoneTimeInfo(DateTime infoDate, string timeZoneId)
{
- ObservanceRule standardRule, daylightRule;
- DateTime standardDate, dstDate;
TimeZoneNameProperty tzn;
DateTimeInstance dti = new DateTimeInstance(infoDate);
@@ -1337,8 +1323,8 @@ public static DateTimeInstance TimeZoneTimeInfo(DateTime infoDate, string timeZo
dti.TimeZoneId = timeZoneId;
// Get the observance rules to use in the conversion
- FindRules(infoDate, timeZoneId, false, out standardRule, out daylightRule, out standardDate,
- out dstDate);
+ FindRules(infoDate, timeZoneId, false, out ObservanceRule standardRule, out ObservanceRule daylightRule,
+ out DateTime standardDate, out DateTime dstDate);
// If neither observance rule was found, use it as-is
if(standardRule == null && daylightRule == null)
diff --git a/Source/EWSPDIData/PDIObjects/VNote.cs b/Source/EWSPDIData/PDIObjects/VNote.cs
index 6f0186f..d46579c 100644
--- a/Source/EWSPDIData/PDIObjects/VNote.cs
+++ b/Source/EWSPDIData/PDIObjects/VNote.cs
@@ -428,7 +428,7 @@ public void WriteToStream(TextWriter tw, StringBuilder sb)
// The BODY property is required, all others are optional. However, it can be blank so we must force
// it if it is blank.
- if(body == null || String.IsNullOrEmpty(body.Value))
+ if(body == null || String.IsNullOrWhiteSpace(body.Value))
tw.Write("BODY:\r\n");
else
BaseProperty.WriteToStream(body, sb, tw);
diff --git a/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs b/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs
index 3481421..c4565dd 100644
--- a/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs
+++ b/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs
@@ -2,8 +2,8 @@
// System : Personal Data Interchange Classes
// File : VTimeZoneCollection.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 11/13/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/21/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// This file contains a collection class for VTimeZone objects
@@ -23,7 +23,6 @@
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
-using System.Globalization;
using System.Threading;
using EWSoftware.PDI.Binding;
@@ -34,10 +33,9 @@ namespace EWSoftware.PDI.Objects
///
/// A type-safe collection of objects
///
- /// The class has a type-safe enumerator. It also uses a to
+ /// The class has a type-safe enumerator. It also uses a to
/// synchronize access to the underlying collection as it is used as a static collection in the
/// object.
- ///
[Serializable, DebuggerDisplay("Count = {Count}")]
public class VTimeZoneCollection : IList, ICollection, IEnumerable, IList,
ICollection, IEnumerable
@@ -46,38 +44,15 @@ public class VTimeZoneCollection : IList, ICollection, IEn
//=====================================================================
[NonSerialized]
- private ReaderWriterLock rwl;
-
- private bool mergingEnabled;
+ private ReaderWriterLockSlim rwl;
private List items;
- [NonSerialized]
- private object _syncRoot;
#endregion
#region Properties
//=====================================================================
- ///
- /// This property returns a object that can be used to synchronize access
- /// to the collection.
- ///
- /// This is useful for access to the collection in web
- /// applications when enumerating the collection or bulk loading time zone components. It allows
- /// multiple concurrent readers of the collection but only one writer at a time to the collection.
- ///
- public ReaderWriterLock Lock
- {
- get
- {
- if(rwl == null)
- rwl = new ReaderWriterLock();
-
- return rwl;
- }
- }
-
///
/// This is used to get or set whether merging of time zone information is disabled
///
@@ -87,11 +62,8 @@ public ReaderWriterLock Lock
/// merged with the existing one. If set to false, no merge will occur and the existing object's
/// settings will remain unchanged. This can be set to false to speed up loading of calendar files and
/// to preserve settings from a common set of time zone objects that you have loaded yourself.
- public bool MergingEnabled
- {
- get { return mergingEnabled; }
- set { mergingEnabled = value; }
- }
+ public bool MergingEnabled { get; set; }
+
#endregion
#region Events
@@ -109,10 +81,7 @@ public bool MergingEnabled
/// The event arguments
protected virtual void OnTimeZoneIdChanged(TimeZoneIdChangedEventArgs e)
{
- var handler = TimeZoneIdChanged;
-
- if(handler != null)
- handler(this, e);
+ TimeZoneIdChanged?.Invoke(this, e);
}
///
@@ -136,7 +105,7 @@ private void tzid_TimeZoneIdChanged(object sender, TimeZoneIdChangedEventArgs e)
/// There are two overloads for the constructor
public VTimeZoneCollection()
{
- mergingEnabled = true;
+ this.MergingEnabled = true;
items = new List();
}
@@ -164,7 +133,7 @@ public VTimeZoneCollection(IEnumerable timeZones) : this()
/// There are two overloads for this method
public int IndexOf(VTimeZone item)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -172,7 +141,7 @@ public int IndexOf(VTimeZone item)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -184,7 +153,7 @@ public int IndexOf(VTimeZone item)
/// found. This version is much faster than the other version as it only has to compare ID values.
public int IndexOf(string tzid)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -196,7 +165,7 @@ public int IndexOf(string tzid)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -214,7 +183,7 @@ public void Insert(int index, VTimeZone item)
if(existing == null)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -223,7 +192,7 @@ public void Insert(int index, VTimeZone item)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
else
@@ -232,7 +201,7 @@ public void Insert(int index, VTimeZone item)
if(index != curIdx)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -245,7 +214,7 @@ public void Insert(int index, VTimeZone item)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
}
@@ -270,7 +239,7 @@ public VTimeZone this[int index]
{
get
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -278,12 +247,12 @@ public VTimeZone this[int index]
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
set
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -294,7 +263,7 @@ public VTimeZone this[int index]
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
}
@@ -310,7 +279,7 @@ public VTimeZone this[string timeZoneId]
{
get
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -322,12 +291,12 @@ public VTimeZone this[string timeZoneId]
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
set
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -342,7 +311,7 @@ public VTimeZone this[string timeZoneId]
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
}
@@ -367,7 +336,7 @@ public void Add(VTimeZone item)
///
public void Clear()
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -378,7 +347,7 @@ public void Clear()
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -389,7 +358,7 @@ public void Clear()
/// True if found, false if not
public bool Contains(VTimeZone item)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -397,7 +366,7 @@ public bool Contains(VTimeZone item)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -408,7 +377,7 @@ public bool Contains(VTimeZone item)
/// The index at which to start copying
public void CopyTo(VTimeZone[] array, int arrayIndex)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -416,7 +385,7 @@ public void CopyTo(VTimeZone[] array, int arrayIndex)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -427,7 +396,7 @@ public int Count
{
get
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -435,7 +404,7 @@ public int Count
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
}
@@ -444,10 +413,7 @@ public int Count
/// This collection is never read-only
///
/// This always returns false
- public bool IsReadOnly
- {
- get { return false; }
- }
+ public bool IsReadOnly => false;
///
/// Remove a from the collection
@@ -456,7 +422,7 @@ public bool IsReadOnly
/// True if the item was removed or false if it was not in the collection
public bool Remove(VTimeZone item)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -470,7 +436,7 @@ public bool Remove(VTimeZone item)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
return false;
@@ -555,19 +521,13 @@ void IList.Insert(int index, object value)
/// The collection is not of a fixed size
///
/// This always returns false
- public bool IsFixedSize
- {
- get { return false; }
- }
+ public bool IsFixedSize => false;
///
/// The collection is not read-only
///
/// This always returns false
- bool IList.IsReadOnly
- {
- get { return false; }
- }
+ bool IList.IsReadOnly => false;
///
/// Explicit IList.Remove implementation
@@ -594,8 +554,8 @@ void IList.RemoveAt(int index)
/// The item at the specified index
object IList.this[int index]
{
- get { return this[index]; }
- set { this[index] = (VTimeZone)value; }
+ get => this[index];
+ set => this[index] = (VTimeZone)value;
}
#endregion
@@ -616,45 +576,110 @@ void ICollection.CopyTo(Array array, int index)
///
/// Explicit ICollection.Count implementation
///
- int ICollection.Count
- {
- get { return this.Count; }
- }
+ int ICollection.Count => this.Count;
///
/// ICollection.IsSynchronized implementation
///
/// This always returns true
- public bool IsSynchronized
- {
- get { return true; }
- }
+ public bool IsSynchronized => true;
///
/// ICollection.SyncRoot implementation
///
/// This provides a less efficient way of synchronizing access to the collection
- public object SyncRoot
+ public object SyncRoot => ((ICollection)items).SyncRoot;
+
+ #endregion
+
+ #region Common helper methods
+ //=====================================================================
+
+ ///
+ /// This can be used to acquire a reader lock on the collection to perform bulk read operations
+ ///
+ /// The timeout in milliseconds after which the lock attempt will fail
+ /// True if the reader lock should be upgradeable to a writer lock,
+ /// false if not. Typically, this should be false unless you may need to acquire a writer lock during
+ /// the period which the read lock is held.
+ /// Calls to this method should be paired with a call to
+ /// to release the lock when done.
+ ///
+ /// This is useful for access to the collection in web
+ /// applications when enumerating the collection or bulk loading time zone components. It allows
+ /// multiple concurrent readers of the collection but only one writer at a time to the collection.
+ ///
+ /// This is thrown if the timeout expires before acquiring the lock
+ public void AcquireReaderLock(int timeout, bool upgradeable = false)
{
- get
+ if(rwl == null)
{
- if(_syncRoot == null)
+ lock(this.SyncRoot)
{
- ICollection coll = items as ICollection;
-
- if(coll != null)
- _syncRoot = coll.SyncRoot;
- else
- Interlocked.CompareExchange(ref _syncRoot, new object(), null);
+ if(rwl == null)
+ rwl = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
}
+ }
+
+ bool success = false;
- return _syncRoot;
+ if(upgradeable || rwl.IsUpgradeableReadLockHeld)
+ success = rwl.TryEnterUpgradeableReadLock(timeout);
+ else
+ success = rwl.TryEnterReadLock(timeout);
+
+ if(!success)
+ throw new TimeoutException("Unable to obtain a reader lock on the time zone collection in the alloted time");
+ }
+
+ ///
+ /// This is used to free a reader lock previously acquired by calling
+ ///
+ public void ReleaseReaderLock()
+ {
+ if(rwl != null)
+ if(rwl.IsUpgradeableReadLockHeld)
+ rwl.ExitUpgradeableReadLock();
+ else
+ if(rwl.IsReadLockHeld)
+ rwl.ExitReadLock();
+ }
+
+ ///
+ /// This can be used to acquire a writer lock on the collection to perform bulk updates
+ ///
+ /// The timeout in milliseconds after which the lock attempt will fail
+ /// Calls to this method should be paired with a call to
+ /// to release the lock when done.
+ ///
+ /// This is useful for access to the collection in web
+ /// applications when enumerating the collection or bulk loading time zone components. It allows
+ /// multiple concurrent readers of the collection but only one writer at a time to the collection.
+ ///
+ /// This is thrown if the timeout expires before acquiring the lock
+ public void AcquireWriterLock(int timeout)
+ {
+ if(rwl == null)
+ {
+ lock(this.SyncRoot)
+ {
+ if(rwl == null)
+ rwl = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+ }
}
+
+ if(!rwl.TryEnterWriteLock(timeout))
+ throw new TimeoutException("Unable to obtain a reader lock on the time zone collection in the alloted time");
}
- #endregion
- #region Common helper methods
- //=====================================================================
+ ///
+ /// This is used to free a writer lock previously acquired by calling
+ ///
+ public void ReleaseWriterLock()
+ {
+ if(rwl != null && rwl.IsWriteLockHeld)
+ rwl.ExitWriteLock();
+ }
///
/// Determine whether or not the collection contains at least one item that matches the conditions in the
@@ -664,7 +689,7 @@ public object SyncRoot
/// Returns true if at least one item matches the conditions or false if none of them do
public bool Exists(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -672,7 +697,7 @@ public bool Exists(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -684,7 +709,7 @@ public bool Exists(Predicate match)
/// is found.
public VTimeZone Find(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -692,7 +717,7 @@ public VTimeZone Find(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -704,7 +729,7 @@ public VTimeZone Find(Predicate match)
/// conditions defined by the specified predicate. If none are found, the collection will be empty.
public ExtendedBindingList FindAll(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -719,7 +744,7 @@ public ExtendedBindingList FindAll(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -732,7 +757,7 @@ public ExtendedBindingList FindAll(Predicate match)
/// defined by the predicate or -1 if nothing is found.
public int FindIndex(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -740,7 +765,7 @@ public int FindIndex(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -754,7 +779,7 @@ public int FindIndex(Predicate match)
/// defined by the predicate or -1 if nothing is found.
public int FindIndex(int startIndex, Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -762,7 +787,7 @@ public int FindIndex(int startIndex, Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -777,7 +802,7 @@ public int FindIndex(int startIndex, Predicate match)
/// defined by the predicate or -1 if nothing is found.
public int FindIndex(int startIndex, int count, Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -785,7 +810,7 @@ public int FindIndex(int startIndex, int count, Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -797,7 +822,7 @@ public int FindIndex(int startIndex, int count, Predicate match)
/// is found.
public VTimeZone FindLast(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -805,7 +830,7 @@ public VTimeZone FindLast(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -818,7 +843,7 @@ public VTimeZone FindLast(Predicate match)
/// defined by the predicate or -1 if nothing is found.
public int FindLastIndex(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -826,7 +851,7 @@ public int FindLastIndex(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -840,7 +865,7 @@ public int FindLastIndex(Predicate match)
/// defined by the predicate or -1 if nothing is found.
public int FindLastIndex(int startIndex, Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -848,7 +873,7 @@ public int FindLastIndex(int startIndex, Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -863,7 +888,7 @@ public int FindLastIndex(int startIndex, Predicate match)
/// defined by the predicate or -1 if nothing is found.
public int FindLastIndex(int startIndex, int count, Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -871,7 +896,7 @@ public int FindLastIndex(int startIndex, int count, Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -881,7 +906,7 @@ public int FindLastIndex(int startIndex, int count, Predicate match)
/// The delegate to perform on each item in the collection
public void ForEach(Action action)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -889,7 +914,7 @@ public void ForEach(Action action)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -900,7 +925,7 @@ public void ForEach(Action action)
/// Returns the number of items removed from the collection
public int RemoveAll(Predicate match)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -908,7 +933,7 @@ public int RemoveAll(Predicate match)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -919,7 +944,7 @@ public int RemoveAll(Predicate match)
/// The number of items to remove
public void RemoveRange(int index, int count)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -927,7 +952,7 @@ public void RemoveRange(int index, int count)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -937,7 +962,7 @@ public void RemoveRange(int index, int count)
/// Pass true for ascending order, false for descending order
public void Sort(bool ascending)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -952,7 +977,7 @@ public void Sort(bool ascending)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -963,7 +988,7 @@ public void Sort(bool ascending)
/// null to use the default comparer.
public void Sort(IComparer comparer)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -971,7 +996,7 @@ public void Sort(IComparer comparer)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -981,7 +1006,7 @@ public void Sort(IComparer comparer)
/// The delegate to use for the comparisons
public void Sort(Comparison comparison)
{
- this.Lock.AcquireWriterLock(250);
+ this.AcquireWriterLock(250);
try
{
@@ -989,7 +1014,7 @@ public void Sort(Comparison comparison)
}
finally
{
- this.Lock.ReleaseWriterLock();
+ this.ReleaseWriterLock();
}
}
@@ -1003,7 +1028,7 @@ public void Sort(Comparison comparison)
/// conditions.
public bool TrueForAll(Predicate match)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -1011,7 +1036,7 @@ public bool TrueForAll(Predicate match)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
#endregion
@@ -1038,7 +1063,7 @@ public void AddRange(IEnumerable timeZones)
/// The version to use
public void PropagateVersion(SpecificationVersions version)
{
- this.Lock.AcquireReaderLock(250);
+ this.AcquireReaderLock(250);
try
{
@@ -1047,7 +1072,7 @@ public void PropagateVersion(SpecificationVersions version)
}
finally
{
- this.Lock.ReleaseReaderLock();
+ this.ReleaseReaderLock();
}
}
@@ -1066,56 +1091,47 @@ public int Merge(VTimeZone vTimeZone)
ObservanceRuleCollection rules;
int idx, tzIdx;
- this.Lock.AcquireReaderLock(250);
+ tzIdx = this.IndexOf(vTimeZone.TimeZoneId.Value);
- try
+ if(tzIdx == -1)
{
- tzIdx = this.IndexOf(vTimeZone.TimeZoneId.Value);
+ this.AcquireWriterLock(250);
- if(tzIdx == -1)
+ try
{
- LockCookie lc = this.Lock.UpgradeToWriterLock(250);
+ vTimeZone.TimeZoneId.TimeZoneIdChanged += tzid_TimeZoneIdChanged;
+ items.Add(vTimeZone);
+ tzIdx = items.Count - 1;
+ }
+ finally
+ {
+ this.ReleaseWriterLock();
+ }
+ }
+ else // Merge the rules if allowed
+ if(this.MergingEnabled)
+ {
+ this.AcquireWriterLock(250);
try
{
- vTimeZone.TimeZoneId.TimeZoneIdChanged += tzid_TimeZoneIdChanged;
- items.Add(vTimeZone);
- tzIdx = items.Count - 1;
- }
- finally
- {
- this.Lock.DowngradeFromWriterLock(ref lc);
- }
- }
- else // Merge the rules if allowed
- if(mergingEnabled)
- {
- LockCookie lc = this.Lock.UpgradeToWriterLock(250);
+ rules = items[tzIdx].ObservanceRules;
- try
+ foreach(ObservanceRule or in vTimeZone.ObservanceRules)
{
- rules = items[tzIdx].ObservanceRules;
+ for(idx = 0; idx < rules.Count; idx++)
+ if(rules[idx].Equals(or))
+ break;
- foreach(ObservanceRule or in vTimeZone.ObservanceRules)
- {
- for(idx = 0; idx < rules.Count; idx++)
- if(rules[idx].Equals(or))
- break;
-
- if(idx == rules.Count)
- rules.Add(or);
- }
- }
- finally
- {
- this.Lock.DowngradeFromWriterLock(ref lc);
+ if(idx == rules.Count)
+ rules.Add(or);
}
}
- }
- finally
- {
- this.Lock.ReleaseReaderLock();
- }
+ finally
+ {
+ this.ReleaseWriterLock();
+ }
+ }
return tzIdx;
}
diff --git a/Source/EWSPDIData/PDIParser/PDIParser.cs b/Source/EWSPDIData/PDIParser/PDIParser.cs
index a1d4725..55e6acc 100644
--- a/Source/EWSPDIData/PDIParser/PDIParser.cs
+++ b/Source/EWSPDIData/PDIParser/PDIParser.cs
@@ -20,8 +20,9 @@
// 03/17/2007 EFW Updated for use with .NET 2.0
//===============================================================================================================
+// Ignore Spelling: vcp sr http https
+
using System;
-using System.Globalization;
using System.IO;
using System.Net;
using System.Text;
@@ -454,7 +455,7 @@ public void ParseReader(TextReader tr)
bool seenLF = false;
if(tr == null)
- throw new ArgumentNullException("tr", LR.GetString("ExParseNullReader"));
+ throw new ArgumentNullException(nameof(tr), LR.GetString("ExParseNullReader"));
try
{
@@ -588,7 +589,7 @@ public void ParseFile(string filename)
StreamReader sr = null;
if(filename == null || filename.Length == 0)
- throw new ArgumentNullException("filename", LR.GetString("ExParseNoFilename"));
+ throw new ArgumentNullException(nameof(filename), LR.GetString("ExParseNoFilename"));
// Exceptions will bubble up to the caller
try
diff --git a/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs b/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs
index 6e17ccb..f623240 100644
--- a/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs
+++ b/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs
@@ -70,17 +70,14 @@ public override string Value
{
string nameValue = base.Value;
- if(String.IsNullOrEmpty(nameValue))
+ if(String.IsNullOrWhiteSpace(nameValue))
return "Unknown";
return nameValue;
}
set
{
- if(value == null)
- throw new ArgumentNullException("value", LR.GetString("ExFNCannotBeNull"));
-
- base.Value = value;
+ base.Value = value ?? throw new ArgumentNullException(nameof(value), LR.GetString("ExFNCannotBeNull"));
}
}
@@ -97,17 +94,14 @@ public override string EncodedValue
{
string nameValue = base.EncodedValue;
- if(String.IsNullOrEmpty(nameValue))
+ if(String.IsNullOrWhiteSpace(nameValue))
return "Unknown";
return nameValue;
}
set
{
- if(value == null)
- throw new ArgumentNullException("value", LR.GetString("ExFNCannotBeNull"));
-
- base.EncodedValue = value;
+ base.EncodedValue = value ?? throw new ArgumentNullException(nameof(value), LR.GetString("ExFNCannotBeNull"));
}
}
#endregion
diff --git a/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs b/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs
index e6a0428..65c90ed 100644
--- a/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs
+++ b/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs
@@ -107,7 +107,7 @@ public override string Value
{
percentage = 0;
- if(!String.IsNullOrEmpty(value) && reNumber.IsMatch(value))
+ if(!String.IsNullOrWhiteSpace(value) && reNumber.IsMatch(value))
{
percentage = Convert.ToInt32(value, CultureInfo.InvariantCulture);
diff --git a/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs b/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs
index b977b2b..6f9f838 100644
--- a/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs
+++ b/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs
@@ -104,7 +104,7 @@ public override string Value
{
count = 0;
- if(!String.IsNullOrEmpty(value) && reNumber.IsMatch(value))
+ if(!String.IsNullOrWhiteSpace(value) && reNumber.IsMatch(value))
{
count = Convert.ToInt32(value, CultureInfo.InvariantCulture);
diff --git a/Source/EWSPDIData/PDIProperties/RepeatProperty.cs b/Source/EWSPDIData/PDIProperties/RepeatProperty.cs
index b2450d5..7b8473a 100644
--- a/Source/EWSPDIData/PDIProperties/RepeatProperty.cs
+++ b/Source/EWSPDIData/PDIProperties/RepeatProperty.cs
@@ -105,7 +105,7 @@ public override string Value
{
repeatCount = 0;
- if(!String.IsNullOrEmpty(value) && reNumber.IsMatch(value))
+ if(!String.IsNullOrWhiteSpace(value) && reNumber.IsMatch(value))
{
repeatCount = Convert.ToInt32(value, CultureInfo.InvariantCulture);
diff --git a/Source/EWSPDIData/Properties/AssemblyInfo.cs b/Source/EWSPDIData/Properties/AssemblyInfo.cs
index d2867b6..6b535d6 100644
--- a/Source/EWSPDIData/Properties/AssemblyInfo.cs
+++ b/Source/EWSPDIData/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : Personal Data Interchange Classes
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 10/14/2014
-// Note : Copyright 2003-2014, Eric Woodruff, All rights reserved
+// Updated : 11/18/2018
+// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// PDI vCard, vCalendar, and iCalendar library assembly attributes
@@ -25,8 +25,6 @@
[assembly: AllowPartiallyTrustedCallers()]
// General assembly information
-[assembly: AssemblyTitle("Personal Data Interchange vCard, vCalendar, and iCalendar library assembly attributes")]
-[assembly: AssemblyDescription("A set of Personal Data Interchange (PDI) classes used to create and work with " +
- "vCard, vCalendar, and iCalendar objects")]
+[assembly: AssemblyTitle("Personal Data Interchange vCard, vCalendar, and iCalendar Classes")]
// See AssemblyInfoShared.cs for the shared attributes common to all projects in the solution
diff --git a/NuGet/ReadMe_PDIData.txt b/Source/EWSPDIData/ReadMe.txt
similarity index 100%
rename from NuGet/ReadMe_PDIData.txt
rename to Source/EWSPDIData/ReadMe.txt
diff --git a/Source/EWSPDIDemos.ruleset b/Source/EWSPDIDemos.ruleset
index efed147..d223daa 100644
--- a/Source/EWSPDIDemos.ruleset
+++ b/Source/EWSPDIDemos.ruleset
@@ -1,5 +1,5 @@
-
+
@@ -20,6 +20,7 @@
+
@@ -30,4 +31,7 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/Source/EWSPDIWeb/EWSPDIWeb.csproj b/Source/EWSPDIWeb/EWSPDIWeb.csproj
deleted file mode 100644
index 7804674..0000000
--- a/Source/EWSPDIWeb/EWSPDIWeb.csproj
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
- Local
- 8.0.50727
- 2.0
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}
- Debug
- AnyCPU
-
-
-
-
- EWSoftware.PDI.Web.Controls
- ..\EWSPDI.snk
- JScript
- Flow
- IE50
- false
- Library
- EWSoftware.PDI.Web.Controls
- OnBuildSuccess
-
-
-
-
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\Debug\
- false
- 285212672
- false
-
-
- DEBUG;TRACE
- bin\Debug\EWSoftware.PDI.Web.Controls.xml
- true
- 4096
- false
-
-
- false
- false
- false
- false
- 4
- full
- prompt
- ..\EWSPDI.ruleset
-
-
- bin\Release\
- false
- 285212672
- false
-
-
- TRACE
- bin\Release\EWSoftware.PDI.Web.Controls.xml
- true
- 4096
- false
-
-
- true
- false
- false
- false
- 4
- pdbonly
- prompt
-
-
- true
-
-
- bin\ReleaseNoDoc\
- TRACE
- 285212672
- bin\Release\EWSoftware.PDI.Web.Controls.xml
- true
- 4096
- AnyCPU
- prompt
- true
-
-
-
- System
-
-
- System.Data
-
-
- System.Design
-
-
- System.Web
-
-
- System.XML
-
-
- EWSPDI
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
-
-
- Properties\AssemblyInfoShared.cs
-
-
-
- Code
-
-
- Code
-
-
- Code
-
-
- Code
-
-
-
-
-
-
-
-
-
-
-
- Designer
-
-
-
- EWSPDI.snk
-
-
-
-
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Source/EWSPDIWeb/EWSoftware.PDI.Web.Controls.csproj b/Source/EWSPDIWeb/EWSoftware.PDI.Web.Controls.csproj
new file mode 100644
index 0000000..dcf0f70
--- /dev/null
+++ b/Source/EWSPDIWeb/EWSoftware.PDI.Web.Controls.csproj
@@ -0,0 +1,87 @@
+
+
+
+ net40
+ True
+ true
+ Eric Woodruff
+ EWSoftware Personal Data Interchange Library
+ EWSoftware PDI Web Controls Library
+ Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved
+ en
+ 2018.11.17.0
+ 18.11.17.0
+ This library contains some web controls that can be used to edit recurrence settings. See the project website for the code, a help file, and demos.
+ Eric Woodruff
+ https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png
+ https://github.com/EWSoftware/PDI
+ git
+ PDI personal data interchange web controls recurrence RFC 2445
+ https://github.com/EWSoftware/PDI
+ https://github.com/EWSoftware/PDI/blob/master/LICENSE
+ Targets .NET 4.0 and later
+ true
+ False
+ False
+ False
+ False
+ ..\EWSPDI.snk
+ ..\EWSPDI.ruleset
+ false
+ pdbonly
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ \
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/EWSPDIWeb/Properties/AssemblyInfo.cs b/Source/EWSPDIWeb/Properties/AssemblyInfo.cs
index 8b1e223..c988ecc 100644
--- a/Source/EWSPDIWeb/Properties/AssemblyInfo.cs
+++ b/Source/EWSPDIWeb/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : EWSoftware.PDI ASP.NET Web Server Controls
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 10/14/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/18/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// ASP.NET web server controls that are used in conjunction with the EWSoftware.PDI classes
@@ -18,6 +18,8 @@
// 02/10/2005 EFW Created the code
//===============================================================================================================
+// Ignore Spelling: javascript css
+
using System.Reflection;
using System.Security;
using System.Web.UI;
@@ -30,8 +32,6 @@
// General assembly information
[assembly: AssemblyTitle("EWSoftware.PDI ASP.NET Web Server Controls")]
-[assembly: AssemblyDescription("ASP.NET web server controls that are used in conjunction with the " +
- "EWSoftware.PDI classes")]
// Define the embedded resources
[assembly: WebResource(EWSoftware.PDI.Web.Controls.RecurrencePattern.RecurrencePatternScripts +
diff --git a/NuGet/ReadMe_PDIWebControls.txt b/Source/EWSPDIWeb/ReadMe.txt
similarity index 100%
rename from NuGet/ReadMe_PDIWebControls.txt
rename to Source/EWSPDIWeb/ReadMe.txt
diff --git a/Source/EWSPDIWinForms/DailyPattern.resx b/Source/EWSPDIWinForms/DailyPattern.resx
index 4599e1f..c99841c 100644
--- a/Source/EWSPDIWinForms/DailyPattern.resx
+++ b/Source/EWSPDIWinForms/DailyPattern.resx
@@ -112,23 +112,23 @@
2.0
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+
NoControl
-
+
8, 8
72, 24
-
+
0
@@ -139,7 +139,7 @@
rbEveryXDays
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
$this
@@ -154,7 +154,7 @@
8, 40
- 134, 24
+ 174, 24
3
@@ -166,7 +166,7 @@
rbEveryWeekday
- System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
$this
@@ -196,7 +196,7 @@
label1
- System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
$this
@@ -208,7 +208,7 @@
72, 10
- 48, 22
+ 48, 26
1
@@ -220,7 +220,7 @@
udcDays
- System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
$this
@@ -228,7 +228,7 @@
0
-
+
True
@@ -238,6 +238,6 @@
DailyPattern
- System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
\ No newline at end of file
diff --git a/Source/EWSPDIWinForms/EWSPDIWinForms.csproj b/Source/EWSPDIWinForms/EWSoftware.PDI.WinForms.Design.csproj
similarity index 87%
rename from Source/EWSPDIWinForms/EWSPDIWinForms.csproj
rename to Source/EWSPDIWinForms/EWSoftware.PDI.WinForms.Design.csproj
index 706fd19..16ca3a3 100644
--- a/Source/EWSPDIWinForms/EWSPDIWinForms.csproj
+++ b/Source/EWSPDIWinForms/EWSoftware.PDI.WinForms.Design.csproj
@@ -1,5 +1,5 @@
-
+
Local
8.0.50727
@@ -27,7 +27,7 @@
3.5
- v4.0
+ v4.7.2
publish\
true
@@ -44,16 +44,18 @@
false
false
true
+ objDesignOnly\
- bin\Debug\
+ binDesignOnly\Debug\
false
285212672
false
DEBUG;TRACE
- bin\Debug\EWSoftware.PDI.Windows.Forms.xml
+
+
true
4096
false
@@ -67,16 +69,18 @@
full
prompt
..\EWSPDI.ruleset
+ false
- bin\Release\
+ binDesignOnly\Release\
false
285212672
false
TRACE
- bin\Release\EWSoftware.PDI.Windows.Forms.xml
+
+
true
4096
false
@@ -89,23 +93,11 @@
4
pdbonly
prompt
+ false
true
-
- bin\ReleaseNoDoc\
- TRACE
- 285212672
- bin\Release\EWSoftware.PDI.Windows.Forms.xml
- true
- 4096
- AnyCPU
- prompt
- false
- true
- true
-
System
@@ -119,11 +111,6 @@
System.XML
-
- EWSPDI
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}
- {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
@@ -189,11 +176,6 @@
UserControl
-
- True
- True
- Resources.resx
-
UserControl
@@ -263,10 +245,6 @@
ResXFileCodeGenerator
PDIWinForms.Designer.cs
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
RecurrencePattern.cs
@@ -314,6 +292,12 @@
EWSPDI.snk
+
+
+ {024821de-3508-476a-97e7-441334a1b2df}
+ EWSoftware.PDI
+
+
diff --git a/Source/EWSPDIWinForms/EWSoftware.PDI.Windows.Forms.csproj b/Source/EWSPDIWinForms/EWSoftware.PDI.Windows.Forms.csproj
new file mode 100644
index 0000000..329131a
--- /dev/null
+++ b/Source/EWSPDIWinForms/EWSoftware.PDI.Windows.Forms.csproj
@@ -0,0 +1,66 @@
+
+
+
+ net40
+ True
+ true
+ Eric Woodruff
+ EWSoftware Personal Data Interchange Library
+ EWSoftware PDI Windows Forms Control Library
+ Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved
+ en
+ 2018.11.17.0
+ 18.11.17.0
+ This library contains some Windows Forms controls that can be used to edit holiday calculation settings and to edit recurrence settings. See the project website for the code, a help file, and demos.
+ Eric Woodruff
+ https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png
+ https://github.com/EWSoftware/PDI
+ git
+ PDI personal data interchange Windows Forms controls recurrence RFC 2445
+ https://github.com/EWSoftware/PDI
+ https://github.com/EWSoftware/PDI/blob/master/LICENSE
+ Targets .NET 4.0 and later
+ true
+ False
+ False
+ False
+ False
+ ..\EWSPDI.snk
+ ..\EWSPDI.ruleset
+ false
+ pdbonly
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ \
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx b/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx
index dbf14e8..993ef7f 100644
--- a/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx
+++ b/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx
@@ -123,10 +123,10 @@
- 12, 261
+ 16, 331
- 88, 32
+ 117, 40
@@ -151,10 +151,10 @@
NoControl
- 358, 261
+ 477, 331
- 88, 32
+ 118, 40
16
@@ -178,10 +178,10 @@
NoControl
- 8, 16
+ 11, 20
- 90, 23
+ 120, 29
0
@@ -205,10 +205,10 @@
13
- 104, 16
+ 139, 20
- 328, 22
+ 437, 26
1
@@ -229,10 +229,10 @@
NoControl
- 40, 48
+ 53, 61
- 58, 23
+ 78, 29
2
@@ -259,10 +259,10 @@
NoControl
- 19, 95
+ 25, 120
- 146, 24
+ 195, 31
4
@@ -286,10 +286,10 @@
NoControl
- 19, 190
+ 25, 241
- 134, 24
+ 179, 30
5
@@ -313,10 +313,10 @@
NoControl
- 159, 191
+ 212, 242
- 106, 23
+ 141, 29
12
@@ -343,10 +343,10 @@
NoControl
- 209, 159
+ 279, 201
- 56, 23
+ 74, 30
10
@@ -370,16 +370,16 @@
9
- 16
+ 20
- 271, 96
+ 361, 122
12
- 80, 24
+ 107, 28
7
@@ -400,10 +400,10 @@
NoControl
- 171, 96
+ 228, 122
- 94, 23
+ 125, 29
6
@@ -430,10 +430,10 @@
NoControl
- 143, 128
+ 191, 162
- 122, 23
+ 162, 29
8
@@ -457,16 +457,16 @@
4
- 16
+ 20
- 271, 128
+ 361, 162
12
- 120, 24
+ 160, 28
9
@@ -484,16 +484,16 @@
5
- 16
+ 20
- 104, 48
+ 139, 61
12
- 104, 24
+ 138, 28
3
@@ -517,16 +517,16 @@
True
- 6, 15
+ 8, 19
- 458, 305
+ 610, 389
- 271, 192
+ 361, 243
- 48, 22
+ 64, 26
13
@@ -547,10 +547,10 @@
0
- 271, 160
+ 361, 203
- 48, 22
+ 64, 26
11
@@ -574,10 +574,10 @@
NoControl
- 175, 224
+ 233, 284
- 264, 24
+ 352, 30
14
diff --git a/Source/EWSPDIWinForms/PDIWinForms.Designer.cs b/Source/EWSPDIWinForms/PDIWinForms.Designer.cs
index 28a4b85..1032fe6 100644
--- a/Source/EWSPDIWinForms/PDIWinForms.Designer.cs
+++ b/Source/EWSPDIWinForms/PDIWinForms.Designer.cs
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.34209
+// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -19,7 +19,7 @@ namespace EWSoftware.PDI.Windows.Forms {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class PDIWinForms {
diff --git a/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs b/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs
index 7bbf6d9..7ad490a 100644
--- a/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs
+++ b/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs
@@ -2,8 +2,8 @@
// System : EWSoftware.PDI Windows Forms Controls
// File : AssemblyInfo.cs
// Author : Eric Woodruff (Eric@EWoodruff.us)
-// Updated : 10/14/2014
-// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+// Updated : 11/18/2018
+// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
// Compiler: Microsoft Visual C#
//
// Windows forms controls that are used in conjunction with the EWSoftware.PDI classes
@@ -22,7 +22,5 @@
// General assembly information
[assembly: AssemblyTitle("EWSoftware.PDI Windows Forms Controls")]
-[assembly: AssemblyDescription("Windows Forms controls that are used in conjunction with the " +
- "EWSoftware.PDI classes")]
// See AssemblyInfoShared.cs for the shared attributes common to all projects in the solution
diff --git a/Source/EWSPDIWinForms/Properties/Resources.Designer.cs b/Source/EWSPDIWinForms/Properties/Resources.Designer.cs
deleted file mode 100644
index 2ebe7f0..0000000
--- a/Source/EWSPDIWinForms/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.34209
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace EWSoftware.PDI.Windows.Forms.Properties {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EWSoftware.PDI.Windows.Forms.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/Source/EWSPDIWinForms/Properties/Resources.resx b/Source/EWSPDIWinForms/Properties/Resources.resx
deleted file mode 100644
index 1af7de1..0000000
--- a/Source/EWSPDIWinForms/Properties/Resources.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/NuGet/ReadMe_PDIWinForms.txt b/Source/EWSPDIWinForms/ReadMe.txt
similarity index 100%
rename from NuGet/ReadMe_PDIWinForms.txt
rename to Source/EWSPDIWinForms/ReadMe.txt
diff --git a/Source/EWSPDIWinForms/YearlyPattern.cs b/Source/EWSPDIWinForms/YearlyPattern.cs
index 01b4392..4942854 100644
--- a/Source/EWSPDIWinForms/YearlyPattern.cs
+++ b/Source/EWSPDIWinForms/YearlyPattern.cs
@@ -21,7 +21,6 @@
using System;
using System.ComponentModel;
-using System.Globalization;
using System.Windows.Forms;
namespace EWSoftware.PDI.Windows.Forms
diff --git a/Source/PDIWebDemo.sln b/Source/PDIWebDemo.sln
index 01d7a81..ea943f6 100644
--- a/Source/PDIWebDemo.sln
+++ b/Source/PDIWebDemo.sln
@@ -4,18 +4,18 @@ VisualStudioVersion = 15.0.27004.2002
MinimumVisualStudioVersion = 10.0.40219.1
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PDIWebDemoCS", "CSharpDemos\PDIWebDemoCS\", "{60252946-B338-4A43-B49A-350776966EAB}"
ProjectSection(WebsiteProperties) = preProject
- TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
- ProjectReferences = "{23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}|EWSoftware.PDI.dll;{13eb4641-36a6-4c9c-af8c-29f3763d392f}|EWSoftware.PDI.Data.dll;{7aac8160-1975-47a2-a171-4c335e5a6c8c}|EWSoftware.PDI.Web.Controls.dll;"
+ TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.7.2"
+ ProjectReferences = "{a7923036-e253-4b09-ae6c-fd409281d0c9}|EWSoftware.PDI.Web.Controls.dll;"
Debug.AspNetCompiler.VirtualPath = "/PDIWebDemoCS"
Debug.AspNetCompiler.PhysicalPath = "CSharpDemos\PDIWebDemoCS\"
- Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoCS\"
+ Debug.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoCS\"
Debug.AspNetCompiler.Updateable = "false"
Debug.AspNetCompiler.ForceOverwrite = "true"
Debug.AspNetCompiler.FixedNames = "false"
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.VirtualPath = "/PDIWebDemoCS"
Release.AspNetCompiler.PhysicalPath = "CSharpDemos\PDIWebDemoCS\"
- Release.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoCS\"
+ Release.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoCS\"
Release.AspNetCompiler.Updateable = "false"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
@@ -26,18 +26,18 @@ Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PDIWebDemoCS", "CSharpDemos
EndProject
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PDIWebDemoVB", "VBNetDemos\PDIWebDemoVB\", "{6EE94951-05F3-4B9B-9595-890681E2DD0B}"
ProjectSection(WebsiteProperties) = preProject
- TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
- ProjectReferences = "{23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}|EWSoftware.PDI.dll;{13eb4641-36a6-4c9c-af8c-29f3763d392f}|EWSoftware.PDI.Data.dll;{7aac8160-1975-47a2-a171-4c335e5a6c8c}|EWSoftware.PDI.Web.Controls.dll;"
+ TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.7.2"
+ ProjectReferences = "{a7923036-e253-4b09-ae6c-fd409281d0c9}|EWSoftware.PDI.Web.Controls.dll;"
Debug.AspNetCompiler.VirtualPath = "/PDIWebDemoVB"
Debug.AspNetCompiler.PhysicalPath = "VBNetDemos\PDIWebDemoVB\"
- Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoVB\"
+ Debug.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoVB\"
Debug.AspNetCompiler.Updateable = "false"
Debug.AspNetCompiler.ForceOverwrite = "true"
Debug.AspNetCompiler.FixedNames = "false"
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.VirtualPath = "/PDIWebDemoVB"
Release.AspNetCompiler.PhysicalPath = "VBNetDemos\PDIWebDemoVB\"
- Release.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoVB\"
+ Release.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoVB\"
Release.AspNetCompiler.Updateable = "false"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
@@ -53,15 +53,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{760BE6
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A883170-D3A8-4356-A405-1755B7DA5E4F}"
ProjectSection(SolutionItems) = preProject
- ..\Source\.editorconfig = ..\Source\.editorconfig
+ .editorconfig = .editorconfig
PDIWebDemo.sln.vsspell = PDIWebDemo.sln.vsspell
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDI", "EWSPDI\EWSPDI.csproj", "{23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI", "EWSPDI\EWSoftware.PDI.csproj", "{1A26024A-D3A3-4F39-AC16-13467866E54E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIData", "EWSPDIData\EWSPDIData.csproj", "{13EB4641-36A6-4C9C-AF8C-29F3763D392F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Data", "EWSPDIData\EWSoftware.PDI.Data.csproj", "{2FAECA0E-F4C1-4323-9698-D23874396293}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWeb", "EWSPDIWeb\EWSPDIWeb.csproj", "{7AAC8160-1975-47A2-A171-4C335E5A6C8C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Web.Controls", "EWSPDIWeb\EWSoftware.PDI.Web.Controls.csproj", "{A7923036-E253-4B09-AE6C-FD409281D0C9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -83,30 +83,30 @@ Global
{6EE94951-05F3-4B9B-9595-890681E2DD0B}.Release|.NET.ActiveCfg = Debug|Any CPU
{6EE94951-05F3-4B9B-9595-890681E2DD0B}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{6EE94951-05F3-4B9B-9595-890681E2DD0B}.Release|Any CPU.Build.0 = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|.NET.Build.0 = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|.NET.ActiveCfg = Release|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|.NET.Build.0 = Release|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.Build.0 = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|.NET.Build.0 = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|.NET.ActiveCfg = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|.NET.Build.0 = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.Build.0 = Release|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|.NET.ActiveCfg = Debug|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|.NET.Build.0 = Debug|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|.NET.ActiveCfg = Release|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|.NET.Build.0 = Release|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|.NET.Build.0 = Debug|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|.NET.ActiveCfg = Release|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|.NET.Build.0 = Release|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|.NET.Build.0 = Debug|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|.NET.ActiveCfg = Release|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|.NET.Build.0 = Release|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|.NET.ActiveCfg = Debug|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|.NET.Build.0 = Debug|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|.NET.ActiveCfg = Release|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|.NET.Build.0 = Release|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Source/VBNetDemos.sln b/Source/VBNetDemos.sln
index feb5afd..5f4a64e 100644
--- a/Source/VBNetDemos.sln
+++ b/Source/VBNetDemos.sln
@@ -2,12 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2002
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PDIDatesTest", "VBNetDemos\PDIDatesTest\PDIDatesTest.vbproj", "{CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}"
-EndProject
-Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PDIParserTest", "VBNetDemos\PDIParserTest\PDIParserTest.vbproj", "{8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}"
-EndProject
-Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RFC2445RecurTest", "VBNetDemos\RFC2445RecurTest\RFC2445RecurTest.vbproj", "{A60B4D1A-216B-4CA7-B078-91F6F27DADE4}"
-EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PDIWinFormsTest", "VBNetDemos\PDIWinFormsTest\PDIWinFormsTest.vbproj", "{32B39562-144C-4272-9251-1FC72D7D4303}"
EndProject
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "vCardBrowser", "VBNetDemos\vCardBrowser\vCardBrowser.vbproj", "{DC514DED-802F-4871-A220-661C0E697A54}"
@@ -20,16 +14,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EWSPDIDemos.ruleset = EWSPDIDemos.ruleset
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDI", "EWSPDI\EWSPDI.csproj", "{23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI", "EWSPDI\EWSoftware.PDI.csproj", "{E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIData", "EWSPDIData\EWSPDIData.csproj", "{13EB4641-36A6-4C9C-AF8C-29F3763D392F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Data", "EWSPDIData\EWSoftware.PDI.Data.csproj", "{4D1D331E-7475-4260-B9AD-8A31848A6054}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWinForms", "EWSPDIWinForms\EWSPDIWinForms.csproj", "{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Windows.Forms", "EWSPDIWinForms\EWSoftware.PDI.Windows.Forms.csproj", "{1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{6D2E4901-CF16-42A8-ADF7-82663A7B4487}"
- ProjectSection(SolutionItems) = preProject
- .nuget\NuGet.Config = .nuget\NuGet.Config
- EndProjectSection
+Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "PDIDatesTest", "VBNetDemos\PDIDatesTest\PDIDatesTest.vbproj", "{1810811B-5862-4CD2-BA0E-EE38414EF646}"
+EndProject
+Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "PDIParserTest", "VBNetDemos\PDIParserTest\PDIParserTest.vbproj", "{CE1CDE90-CAD7-44ED-B75C-4344DA98A121}"
+EndProject
+Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "RFC2445RecurTest", "VBNetDemos\RFC2445RecurTest\RFC2445RecurTest.vbproj", "{DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -37,18 +32,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Release|Any CPU.Build.0 = Release|Any CPU
- {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Release|Any CPU.Build.0 = Release|Any CPU
- {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Release|Any CPU.Build.0 = Release|Any CPU
{32B39562-144C-4272-9251-1FC72D7D4303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32B39562-144C-4272-9251-1FC72D7D4303}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32B39562-144C-4272-9251-1FC72D7D4303}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -61,18 +44,30 @@ Global
{45A94A5D-36E8-41CC-A013-88B44A97F5E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{45A94A5D-36E8-41CC-A013-88B44A97F5E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{45A94A5D-36E8-41CC-A013-88B44A97F5E3}.Release|Any CPU.Build.0 = Release|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.Build.0 = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.Build.0 = Release|Any CPU
- {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D1D331E-7475-4260-B9AD-8A31848A6054}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D1D331E-7475-4260-B9AD-8A31848A6054}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D1D331E-7475-4260-B9AD-8A31848A6054}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D1D331E-7475-4260-B9AD-8A31848A6054}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1810811B-5862-4CD2-BA0E-EE38414EF646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1810811B-5862-4CD2-BA0E-EE38414EF646}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1810811B-5862-4CD2-BA0E-EE38414EF646}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1810811B-5862-4CD2-BA0E-EE38414EF646}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb b/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb
index cd2d448..3b2d45a 100644
--- a/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb
+++ b/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb
@@ -124,13 +124,13 @@ Public Partial Class AlarmControl
End If
If (a.Action.Action = AlarmAction.EMail OrElse a.Action.Action = AlarmAction.Display) AndAlso
- String.IsNullOrEmpty(a.Description.Value) Then
+ String.IsNullOrWhiteSpace(a.Description.Value) Then
Me.ErrorProvider.SetError(txtDescription, "A description is required")
result = False
End If
If a.Action.Action = AlarmAction.EMail Then
- If String.IsNullOrEmpty(a.Summary.Value) Then
+ If String.IsNullOrWhiteSpace(a.Summary.Value) Then
Me.ErrorProvider.SetError(txtSummary, "A summary is required for an e-mail alarm")
result = False
Else
diff --git a/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj b/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj
index 16a5d3f..ffac5c8 100644
--- a/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj
+++ b/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj
@@ -1,5 +1,5 @@
-
+
Local
8.0.50727
@@ -22,14 +22,14 @@
On
On
CalendarBrowser
- CalendarBrowser.My.MyApplication
+ CalendarBrowser.CalendarBrowserForm
- WindowsForms
+ WindowsFormsWithCustomSubMain
3.5
- v4.0
+ v4.7.2
publish\
true
@@ -67,6 +67,7 @@
42016,42017,42018,42019,42032,42353,42354,42355
full
..\..\EWSPDIDemos.ruleset
+ false
bin\
@@ -87,10 +88,14 @@
1
42016,42017,42018,42019,42032,42353,42354,42355
none
+ false
true
+
+ app.manifest
+
System
@@ -265,6 +270,7 @@
+
@@ -285,17 +291,17 @@
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
+
+ {4d1d331e-7475-4260-b9ad-8a31848a6054}
+ EWSoftware.PDI.Data
-
- {dbd186a2-8160-4bf3-92d4-61bf262f0ca2}
- EWSPDIWinForms
+
+ {1e7aaf3e-6978-4c69-a2fb-916af6f77d9e}
+ EWSoftware.PDI.Windows.Forms
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
+
+ {e4be35a2-31c3-4be1-a257-413fb78cdd9b}
+ EWSoftware.PDI
diff --git a/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb b/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb
index f935678..c07223c 100644
--- a/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb
+++ b/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb
@@ -47,6 +47,15 @@ Public Partial Class CalendarBrowserForm
'''
''' The main entry point for the application
'''
+ Shared Sub Main(Args As String())
+ Application.EnableVisualStyles()
+ Application.SetCompatibleTextRenderingDefault(false)
+ Application.Run(new CalendarBrowserForm())
+ End Sub
+
+ '''
+ ''' Constructor
+ '''
Public Sub New()
MyBase.New()
diff --git a/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb b/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb
index dec92a4..88dd01c 100644
--- a/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb
+++ b/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
'
' This code was generated by a tool.
-' Runtime Version:4.0.30319.1
+' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -11,28 +11,3 @@
Option Strict On
Option Explicit On
-
-Namespace My
-
- 'NOTE: This file is auto-generated; do not modify it directly. To make changes,
- ' or if you encounter build errors in this file, go to the Project Designer
- ' (go to Project Properties or double-click the My Project node in
- ' Solution Explorer), and make changes on the Application tab.
- '
- Partial Friend Class MyApplication
-
- _
- Public Sub New()
- MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
- Me.IsSingleInstance = false
- Me.EnableVisualStyles = true
- Me.SaveMySettingsOnExit = false
- Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
- End Sub
-
- _
- Protected Overrides Sub OnCreateMainForm()
- Me.MainForm = Global.CalendarBrowser.CalendarBrowserForm
- End Sub
- End Class
-End Namespace
diff --git a/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp b/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp
index e7dd583..c8f32b8 100644
--- a/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp
+++ b/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp
@@ -1,6 +1,6 @@
- true
+ false
CalendarBrowserForm
false
0
diff --git a/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb b/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb
index a128868..889ded6 100644
--- a/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb
+++ b/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : AssemblyInfo.cs
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 01/19/2015
-' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved
+' Updated : 11/20/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
' PDI library demos common assembly attributes
@@ -27,7 +27,7 @@ Imports System.Runtime.InteropServices
' General assembly information
-
+
#If DEBUG
@@ -51,5 +51,5 @@ Imports System.Runtime.InteropServices
' Day of release
' Revision (typically zero unless multiple releases are made on the same day)
'
-
-
+
+
diff --git a/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb b/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb
index 590b27e..8ba50ab 100644
--- a/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb
+++ b/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb
@@ -80,7 +80,7 @@ Public Partial Class RequestStatusControl
RequestStatusPropertyCollection)
For Each status As RequestStatusProperty In requests
- If String.IsNullOrEmpty(status.StatusMessage) Then
+ If String.IsNullOrWhiteSpace(status.StatusMessage) Then
Me.BindingSource.Position = requests.IndexOf(status)
txtMessage.Focus()
txtMessage_Validating(txtMessage, New CancelEventArgs())
diff --git a/Source/VBNetDemos/CalendarBrowser/app.config b/Source/VBNetDemos/CalendarBrowser/app.config
index 793777f..9659fad 100644
--- a/Source/VBNetDemos/CalendarBrowser/app.config
+++ b/Source/VBNetDemos/CalendarBrowser/app.config
@@ -21,6 +21,9 @@
-
+
+
+
+
diff --git a/Source/VBNetDemos/CalendarBrowser/app.manifest b/Source/VBNetDemos/CalendarBrowser/app.manifest
new file mode 100644
index 0000000..5dbcd41
--- /dev/null
+++ b/Source/VBNetDemos/CalendarBrowser/app.manifest
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb b/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb
index b171d17..5e0097f 100644
--- a/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb
+++ b/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : AssemblyInfo.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 01/01/2015
-' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved
+' Updated : 11/20/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
' Assembly information for the demo application.
diff --git a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb
index 90c318e..115a548 100644
--- a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb
+++ b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb
@@ -2,7 +2,7 @@
' System : EWSoftware PDI Demonstration Applications
' File : PDIDatesTest.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 11/15/2018
+' Updated : 11/20/2018
' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
@@ -19,10 +19,7 @@
' 12/01/2004 EFW Created the code
'================================================================================================================
-Imports System.Collections.Generic
Imports System.IO
-Imports System.Linq
-Imports System.Runtime.Serialization.Formatters.Soap
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Xml.Serialization
@@ -39,42 +36,44 @@ Module PDIDatesTest
Dim recurDates As DateTimeCollection
Dim yearFrom, yearTo, idx As Integer
- If args.GetUpperBound(0) < 1 Then
- Console.WriteLine("Specify a starting and ending year")
- Return
+ If args.Length <> 2 Then
+ Console.WriteLine("Using current year +/- 4 years for testing" + Environment.NewLine)
+
+ yearFrom = DateTime.Today.Year - 4
+ yearTo = yearFrom + 8
+ Else
+ Try
+ yearFrom = Convert.ToInt32(args(0))
+ yearTo = Convert.ToInt32(args(1))
+
+ If yearFrom < 1 Then yearFrom = 1
+ If yearFrom > 9999 Then yearFrom = 9999
+ If yearTo < 1 Then yearTo = 1
+ If yearTo > 9999 Then yearTo = 9999
+
+ If yearFrom > yearTo Then
+ idx = yearFrom
+ yearFrom = yearTo
+ yearTo = idx
+ End If
+ Catch
+ Console.WriteLine("Invalid year specified on command line")
+ Return
+ End Try
End If
- Try
- yearFrom = Convert.ToInt32(args(0))
- yearTo = Convert.ToInt32(args(1))
-
- If yearFrom < 1 Then yearFrom = 1
- If yearFrom > 9999 Then yearFrom = 9999
- If yearTo < 1 Then yearTo = 1
- If yearTo > 9999 Then yearTo = 9999
-
- If yearFrom > yearTo Then
- idx = yearFrom
- yearFrom = yearTo
- yearTo = idx
- End If
- Catch
- Console.WriteLine("Invalid year specified on command line")
- Return
- End Try
-
' Test DateUtils.CalculateOccurrenceDate
- Console.WriteLine("Fourth weekday in January 2004: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0))
+ Console.WriteLine("Fourth weekday in January 2018: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0))
- Console.WriteLine("Fourth weekday in January 2004 + 2: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2))
+ Console.WriteLine("Fourth weekday in January 2018 + 2: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2))
- Console.WriteLine("Last weekend day in January 2004: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0))
+ Console.WriteLine("Last weekend day in January 2018: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0))
- Console.WriteLine("Last weekend day in January 2004 + 2: {0:d}",
- DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2))
+ Console.WriteLine("Last weekend day in January 2018 + 2: {0:d}",
+ DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2))
' Pause to review output
Console.WriteLine("Press ENTER to continue")
@@ -87,7 +86,7 @@ Module PDIDatesTest
Console.WriteLine("Week start = Monday")
Dim dow As DayOfWeek = DayOfWeek.Monday
- For year = 1998 To 2009
+ For year = yearFrom To yearTo
For idx = 1 To 53
If idx <> 53 Or DateUtils.WeeksInYear(year, dow) = 53 Then
weekFrom = DateUtils.DateFromWeek(year, idx, dow, 0)
@@ -149,51 +148,51 @@ Module PDIDatesTest
' Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone
Console.WriteLine("Expressed in Universal Time")
- Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", False))
- Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", False))
- Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", False))
- Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", False))
- Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.123", False))
- Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.98Z", False))
- Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", False))
- Console.WriteLine("20040314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20040314T102531.123+0830", False))
-
- Console.WriteLine("{0}2004-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2004-03-14", False))
- Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", False))
- Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", False))
- Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", False))
- Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.123", False))
- Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", False))
- Console.WriteLine("2004-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31-04", False))
- Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", False))
+ Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", False))
+ Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", False))
+ Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", False))
+ Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", False))
+ Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.123", False))
+ Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.98Z", False))
+ Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", False))
+ Console.WriteLine("20180314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20180314T102531.123+0830", False))
+
+ Console.WriteLine("{0}2018-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2018-03-14", False))
+ Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", False))
+ Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", False))
+ Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", False))
+ Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.123", False))
+ Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", False))
+ Console.WriteLine("2018-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31-04", False))
+ Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", False))
' Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone
Console.WriteLine("{0}Expressed in Local Time", Environment.NewLine)
- Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", True))
- Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", True))
- Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", True))
- Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", True))
- Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.123", True))
- Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("20040314T102531.98Z", True))
- Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", True))
- Console.WriteLine("20040314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20040314T102531.123+0830", True))
-
- Console.WriteLine("{0}2004-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2004-03-14", True))
- Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", True))
- Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", True))
- Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", True))
- Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.123", True))
- Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
- DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", True))
- Console.WriteLine("2004-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31-04", True))
- Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", True))
+ Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", True))
+ Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", True))
+ Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", True))
+ Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", True))
+ Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.123", True))
+ Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("20180314T102531.98Z", True))
+ Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", True))
+ Console.WriteLine("20180314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20180314T102531.123+0830", True))
+
+ Console.WriteLine("{0}2018-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2018-03-14", True))
+ Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", True))
+ Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", True))
+ Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", True))
+ Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.123", True))
+ Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}",
+ DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", True))
+ Console.WriteLine("2018-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31-04", True))
+ Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", True))
Dim ts As TimeSpan = DateUtils.FromISO8601TimeZone("+08")
Console.WriteLine("{0}+08 = {1} hours {2} minutes", Environment.NewLine, ts.Hours, ts.Minutes)
@@ -460,16 +459,17 @@ Module PDIDatesTest
xs.Serialize(fs, holidays)
Console.WriteLine("Holidays saved to Holidays.xml")
End Using
-
+#If NETFramework
+ ' The SOAP formatter is only supported on the full .NET Framework
' SOAP
Using fs As New FileStream("Holidays.soap", FileMode.Create)
- Dim sf As New SoapFormatter()
+ Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter()
' SOAP doesn't support generics directly so use an array
sf.Serialize(fs, holidays.ToArray())
Console.WriteLine("Holidays saved to Holidays.soap")
End Using
-
+#End If
' Binary
Using fs As New FileStream("Holidays.bin", FileMode.Create)
Dim bf As New BinaryFormatter()
@@ -500,17 +500,17 @@ Module PDIDatesTest
holidays = DirectCast(xs.Deserialize(fs), HolidayCollection)
Console.WriteLine("Holidays retrieved from Holidays.xml")
End Using
-
+#If NETFramework
' SOAP
Using fs As New FileStream("Holidays.soap", FileMode.Open)
- Dim sf As New SoapFormatter()
+ Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter()
' As noted, SOAP doesn't support generics to an array is used instead
holidays = New HolidayCollection(DirectCast(sf.Deserialize(fs), Holiday()))
Console.WriteLine("Holidays retrieved from Holidays.soap")
End Using
-
+#End If
' Binary
Using fs As New FileStream("Holidays.bin", FileMode.Open)
Dim bf As New BinaryFormatter()
@@ -609,14 +609,14 @@ Module PDIDatesTest
xs.Serialize(fs, rRecur)
Console.WriteLine("Recurrence saved to Recurrence.xml")
End Using
-
+#If NETFramework
' SOAP
Using fs As New FileStream("Recurrence.soap", FileMode.Create)
- Dim sf As New SoapFormatter()
+ Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter()
sf.Serialize(fs, rRecur)
Console.WriteLine("Recurrence saved to Recurrence.soap")
End Using
-
+#End If
' Binary
Using fs As New FileStream("Recurrence.bin", FileMode.Create)
Dim bf As New BinaryFormatter()
@@ -647,14 +647,14 @@ Module PDIDatesTest
rRecur = DirectCast(xs.Deserialize(fs), Recurrence)
Console.WriteLine("Recurrence restored from Recurrence.xml")
End Using
-
+#If NETFramework
' SOAP
Using fs As New FileStream("Recurrence.soap", FileMode.Open)
- Dim sf As New SoapFormatter()
+ Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter()
rRecur = DirectCast(sf.Deserialize(fs), Recurrence)
Console.WriteLine("Recurrence retrieved from Recurrence.soap")
End Using
-
+#End If
' Binary
Using fs As New FileStream("Recurrence.bin", FileMode.Open)
Dim bf As New BinaryFormatter()
diff --git a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj
index 4bd5369..23f4ef1 100644
--- a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj
+++ b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj
@@ -1,159 +1,27 @@
-
-
+
+
- Local
- 8.0.50727
- 2.0
- {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}
- Debug
- AnyCPU
-
-
-
-
- PDIDatesTest
- PDIDatesTest.snk
- None
- JScript
- Grid
- IE50
- false
Exe
- Binary
- On
- On
- PDIDatesTest
- PDIDatesTest.PDIDatesTest
-
-
- Console
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\
-
-
- 285212672
-
-
-
-
- true
- true
- true
- false
- false
- false
- false
- 1
- 42016,42017,42018,42019,42032,42353,42354,42355
- full
- ..\..\EWSPDIDemos.ruleset
-
-
- bin\
-
-
- 285212672
-
-
-
-
- false
- true
- false
- true
- false
- false
- false
- 1
- 42016,42017,42018,42019,42032,42353,42354,42355
- none
-
-
+ netcoreapp2.1
+ False
+ False
+ False
+ False
+ False
+ False
+ ProductAttribute
+ PDIDatesTest.snk
true
+ ..\..\EWSPDIDemos.ruleset
+ false
+
-
- System
-
-
- System.Runtime.Serialization.Formatters.Soap
-
-
- System.XML
-
-
-
-
-
+
+
-
- My Project\AssemblyInfoShared.vb
-
-
-
- Code
-
-
- Code
-
+
-
-
-
-
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
-
-
-
-
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/Source/VBNetDemos/PDIDatesTest/app.config b/Source/VBNetDemos/PDIDatesTest/app.config
deleted file mode 100644
index 793777f..0000000
--- a/Source/VBNetDemos/PDIDatesTest/app.config
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb b/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb
index 19c04ff..eafec44 100644
--- a/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb
+++ b/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : AssemblyInfo.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 01/01/2015
-' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved
+' Updated : 11/20/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
' Assembly information for the demo application
diff --git a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb
index cb9dccd..e2efa02 100644
--- a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb
+++ b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : PDIParserTest.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 01/01/2015
-' Note : Copyright 2003-2015, Eric Woodruff, All rights reserved
+' Updated : 11/20/2018
+' Note : Copyright 2003-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
' This is just a quick test of the PDI vCard and calendar parser classes in a console mode application
@@ -19,6 +19,8 @@
' 08/19/2007 EFW Added support for vNote object
'================================================================================================================
+' Ignore Spelling: iso
+
Imports System.IO
Imports System.Text
@@ -35,10 +37,9 @@ Module PDIParserTest
Sub Main(args As String())
Dim outputFolder, outputFile, file As String
- If args.GetUpperBound(0) < 1 Then
- Console.WriteLine("Specify a folder name containing PDI files and a different one for the " &
- "output files.")
- Return
+ If args.Length < 2 Then
+ Console.WriteLine("Using files from .\PDIFiles for the test" + Environment.NewLine)
+ args = New String(1) { "..\..\..\..\..\..\PDIFiles", "..\..\..\..\..\..\PDIFiles_Copy" }
End If
Try
diff --git a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj
index c4af909..ce43ba2 100644
--- a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj
+++ b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj
@@ -1,156 +1,28 @@
-
-
+
+
- Local
- 8.0.50727
- 2.0
- {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}
- Debug
- AnyCPU
-
-
-
-
- PDIParserTest
- PDIParserTest.snk
- None
- JScript
- Grid
- IE50
- false
Exe
- Binary
- On
- On
- PDIParserTest
- PDIParserTest.PDIParserTest
-
-
- Console
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\
-
-
- 285212672
-
-
-
-
- true
- true
- true
- false
- false
- false
- false
- 1
- 42016,42017,42018,42019,42032,42353,42354,42355
- full
- ..\..\EWSPDIDemos.ruleset
-
-
- bin\
-
-
- 285212672
-
-
-
-
- false
- true
- false
- true
- false
- false
- false
- 1
- 42016,42017,42018,42019,42032,42353,42354,42355
- none
-
-
+ netcoreapp2.1
+ False
+ False
+ False
+ False
+ False
+ False
+ ProductAttribute
+ PDIParserTest.snk
true
+ ..\..\EWSPDIDemos.ruleset
+ false
+
-
- System
-
-
-
-
-
+
+
-
- My Project\AssemblyInfoShared.vb
-
-
- Code
-
-
- Code
-
+
+
-
-
-
-
-
-
-
-
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
-
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/Source/VBNetDemos/PDIParserTest/app.config b/Source/VBNetDemos/PDIParserTest/app.config
deleted file mode 100644
index 793777f..0000000
--- a/Source/VBNetDemos/PDIParserTest/app.config
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb b/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb
index c5235ae..e79bd5e 100644
--- a/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb
+++ b/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : Global.asax.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 12/30/2014
-' Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+' Updated : 11/21/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Microsoft VB.NET
'
' At application start up, a common set of time zones is loaded into the VCalendar.TimeZones collection and a
@@ -44,7 +44,7 @@ Namespace PDIWebDemoVB
' multiple sessions may try to access it at the same time. The parser will acquire a write lock
' if it needs to merge a time zone component but since we are loading many time zones at once,
' we'll lock it now.
- VCalendar.TimeZones.Lock.AcquireWriterLock(250)
+ VCalendar.TimeZones.AcquireWriterLock(250)
Try
' If still zero, load the file
@@ -55,7 +55,7 @@ Namespace PDIWebDemoVB
End If
Finally
- VCalendar.TimeZones.Lock.ReleaseWriterLock()
+ VCalendar.TimeZones.ReleaseWriterLock()
End Try
End If
diff --git a/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb b/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb
index 4ee8631..e9726fc 100644
--- a/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb
+++ b/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : EventRecurTestForm.aspx.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 12/31/2014
-' Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+' Updated : 11/21/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Microsoft VB.NET
'
' This page is used to demonstrate recurrence with the calendar components
@@ -45,7 +45,7 @@ Namespace PDIWebDemoVB
' The time zone information is loaded in the Application_Start event in Global.asax. We'll
' acquire a reader lock on the time zone collection as it's possible other sessions could be
' parsing calendars with time zone data that could change the collection.
- VCalendar.TimeZones.Lock.AcquireReaderLock(250)
+ VCalendar.TimeZones.AcquireReaderLock(250)
Try
cboTimeZone.Items.Add("No time zone")
@@ -55,7 +55,7 @@ Namespace PDIWebDemoVB
Next
Finally
- VCalendar.TimeZones.Lock.ReleaseReaderLock()
+ VCalendar.TimeZones.ReleaseReaderLock()
End Try
' Set up some defaults for testing
diff --git a/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics b/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics
index 642a946..814850c 100644
--- a/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics
+++ b/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics
@@ -2,12 +2,21 @@ BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//EWSoftware//PDI Class Library//EN
BEGIN:VTIMEZONE
-TZID:(UTC) Casablanca
+TZID:(UTC) Coordinated Universal Time
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:Coordinated Universal Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+00:00) Casablanca
BEGIN:STANDARD
DTSTART:19701025T030000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Morocco Standard Time
END:STANDARD
BEGIN:DAYLIGHT
@@ -19,16 +28,7 @@ TZNAME:Morocco Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC) Coordinated Universal Time
-BEGIN:STANDARD
-DTSTART:19700101T000000
-TZOFFSETFROM:+0000
-TZOFFSETTO:+0000
-TZNAME:Coordinated Universal Time
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VTIMEZONE
-TZID:(UTC) Dublin\, Edinburgh\, Lisbon\, London
+TZID:(UTC+00:00) Dublin\, Edinburgh\, Lisbon\, London
BEGIN:STANDARD
DTSTART:19701025T020000
TZOFFSETFROM:+0100
@@ -45,7 +45,7 @@ TZNAME:GMT Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC) Monrovia\, Reykjavik
+TZID:(UTC+00:00) Monrovia\, Reykjavik
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+0100
@@ -105,6 +105,23 @@ TZNAME:Romance Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+01:00) Sao Tome
+BEGIN:STANDARD
+DTSTART:19700105T010000
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:Sao Tome Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700105T000000
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:Sao Tome Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+01:00) Sarajevo\, Skopje\, Warsaw\, Zagreb
BEGIN:STANDARD
DTSTART:19701025T030000
@@ -131,23 +148,6 @@ TZNAME:W. Central Africa Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+01:00) Windhoek
-BEGIN:STANDARD
-DTSTART:19700405T020000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
-TZNAME:Namibia Standard Time
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700906T020000
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
-TZNAME:Namibia Daylight Time
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VTIMEZONE
TZID:(UTC+02:00) Amman
BEGIN:STANDARD
DTSTART:19701030T010000
@@ -194,25 +194,34 @@ BEGIN:DAYLIGHT
DTSTART:19700328T235959
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA
TZNAME:Middle East Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+02:00) Cairo
BEGIN:STANDARD
-DTSTART:19700924T235959
+DTSTART:19700101T000000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH
TZNAME:Egypt Standard Time
END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+02:00) Chisinau
+BEGIN:STANDARD
+DTSTART:19701025T030000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+TZNAME:E. Europe Standard Time
+END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700521T235959
+DTSTART:19700329T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=3TH
-TZNAME:Egypt Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+TZNAME:E. Europe Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -225,28 +234,28 @@ RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1TH
TZNAME:Syria Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700402T235959
+DTSTART:19700327T000000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1TH
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR
TZNAME:Syria Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+02:00) E. Europe
+TZID:(UTC+02:00) Gaza\, Hebron
BEGIN:STANDARD
-DTSTART:19701025T030000
+DTSTART:19701031T010000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:E. Europe Standard Time
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA
+TZNAME:West Bank Gaza Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700329T020000
+DTSTART:19700328T010000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-TZNAME:E. Europe Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA
+TZNAME:West Bank Gaza Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -276,23 +285,6 @@ TZNAME:FLE Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+02:00) Istanbul
-BEGIN:STANDARD
-DTSTART:19701025T040000
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Turkey Standard Time
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700330T030000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1MO
-TZNAME:Turkey Daylight Time
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VTIMEZONE
TZID:(UTC+02:00) Jerusalem
BEGIN:STANDARD
DTSTART:19701025T020000
@@ -305,26 +297,27 @@ BEGIN:DAYLIGHT
DTSTART:19700327T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4FR
TZNAME:Jerusalem Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+02:00) Kaliningrad (RTZ 1)
+TZID:(UTC+02:00) Kaliningrad
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 1 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 1 Daylight Time
-END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+02:00) Khartoum
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:Sudan Standard Time
+END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+02:00) Tripoli
@@ -336,6 +329,15 @@ TZNAME:Libya Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+02:00) Windhoek
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:Namibia Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+03:00) Baghdad
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -345,6 +347,15 @@ TZNAME:Arabic Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+03:00) Istanbul
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:Turkey Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+03:00) Kuwait\, Riyadh
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -363,21 +374,13 @@ TZNAME:Belarus Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd (RTZ 2)
+TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0400
TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 2 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0400
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 2 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+03:00) Nairobi
@@ -391,17 +394,17 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+03:30) Tehran
BEGIN:STANDARD
-DTSTART:19700921T235959
+DTSTART:19700918T235959
TZOFFSETFROM:+0430
TZOFFSETTO:+0330
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3FR
TZNAME:Iran Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700321T235959
+DTSTART:19700326T000000
TZOFFSETFROM:+0330
TZOFFSETTO:+0430
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SA
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4TH
TZNAME:Iran Daylight Time
END:DAYLIGHT
END:VTIMEZONE
@@ -415,24 +418,25 @@ TZNAME:Arabian Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+04:00) Astrakhan\, Ulyanovsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:Astrakhan Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+04:00) Baku
BEGIN:STANDARD
-DTSTART:19701025T050000
+DTSTART:19700101T000000
TZOFFSETFROM:+0500
TZOFFSETTO:+0400
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Azerbaijan Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700329T040000
-TZOFFSETFROM:+0400
-TZOFFSETTO:+0500
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
-TZNAME:Azerbaijan Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+04:00) Izhevsk\, Samara (RTZ 3)
+TZID:(UTC+04:00) Izhevsk\, Samara
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+0500
@@ -450,6 +454,15 @@ TZNAME:Mauritius Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+04:00) Saratov
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:Saratov Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+04:00) Tbilisi
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -486,21 +499,13 @@ TZNAME:West Asia Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+05:00) Ekaterinburg (RTZ 4)
+TZID:(UTC+05:00) Ekaterinburg
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0600
TZOFFSETTO:+0500
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 4 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0500
-TZOFFSETTO:+0600
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 4 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+05:00) Islamabad\, Karachi
@@ -557,21 +562,13 @@ TZNAME:Bangladesh Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+06:00) Novosibirsk (RTZ 5)
+TZID:(UTC+06:00) Omsk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0700
TZOFFSETTO:+0600
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Russia TZ 5 Standard Time
+TZNAME:Omsk Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0600
-TZOFFSETTO:+0700
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 5 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+06:30) Yangon (Rangoon)
@@ -592,21 +589,49 @@ TZNAME:SE Asia Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+07:00) Krasnoyarsk (RTZ 6)
+TZID:(UTC+07:00) Barnaul\, Gorno-Altaysk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:Altai Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Hovd
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:W. Mongolia Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Krasnoyarsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
TZOFFSETFROM:+0800
TZOFFSETTO:+0700
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 6 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0700
-TZOFFSETTO:+0800
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 6 Daylight Time
-END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Novosibirsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:Novosibirsk Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+07:00) Tomsk
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:Tomsk Standard Time
+END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+08:00) Beijing\, Chongqing\, Hong Kong\, Urumqi
@@ -618,21 +643,13 @@ TZNAME:China Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+08:00) Irkutsk (RTZ 7)
+TZID:(UTC+08:00) Irkutsk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0800
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 7 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0800
-TZOFFSETTO:+0900
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 7 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+08:00) Kuala Lumpur\, Singapore
@@ -671,6 +688,24 @@ TZNAME:Ulaanbaatar Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+08:45) Eucla
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+0945
+TZOFFSETTO:+0845
+TZNAME:Aus Central W. Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+09:00) Chita
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:Transbaikal Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+09:00) Osaka\, Sapporo\, Tokyo
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -680,6 +715,23 @@ TZNAME:Tokyo Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+09:00) Pyongyang
+BEGIN:STANDARD
+DTSTART:19700501T233000
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1FR
+TZNAME:North Korea Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700105T000000
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:North Korea Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+09:00) Seoul
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -689,21 +741,13 @@ TZNAME:Korea Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+09:00) Yakutsk (RTZ 8)
+TZID:(UTC+09:00) Yakutsk
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700101T000000
TZOFFSETFROM:+1000
TZOFFSETTO:+0900
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
TZNAME:Russia TZ 8 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+0900
-TZOFFSETTO:+1000
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 8 Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+09:30) Adelaide
@@ -784,41 +828,42 @@ TZNAME:Tasmania Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+10:00) Magadan
+TZID:(UTC+10:00) Vladivostok
BEGIN:STANDARD
-DTSTART:19701025T020000
-TZOFFSETFROM:+1200
+DTSTART:19700101T000000
+TZOFFSETFROM:+1100
TZOFFSETTO:+1000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Magadan Standard Time
+TZNAME:Russia TZ 9 Standard Time
END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+1000
-TZOFFSETTO:+1200
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Magadan Daylight Time
-END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+10:00) Vladivostok\, Magadan (RTZ 9)
+TZID:(UTC+10:30) Lord Howe Island
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19700405T020000
TZOFFSETFROM:+1100
-TZOFFSETTO:+1000
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
-TZNAME:Russia TZ 9 Standard Time
+TZOFFSETTO:+1030
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZNAME:Lord Howe Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700107T000000
-TZOFFSETFROM:+1000
+DTSTART:19701004T020000
+TZOFFSETFROM:+1030
TZOFFSETTO:+1100
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE
-TZNAME:Russia TZ 9 Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+TZNAME:Lord Howe Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+11:00) Chokurdakh (RTZ 10)
+TZID:(UTC+11:00) Bougainville Island
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Bougainville Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Chokurdakh
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+1200
@@ -827,6 +872,33 @@ TZNAME:Russia TZ 10 Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Magadan
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Magadan Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Norfolk Island
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Norfolk Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+11:00) Sakhalin
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:Sakhalin Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+11:00) Solomon Is.\, New Caledonia
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -836,7 +908,7 @@ TZNAME:Central Pacific Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky (RTZ 11)
+TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+1300
@@ -873,10 +945,10 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+12:00) Fiji
BEGIN:STANDARD
-DTSTART:19700118T020000
+DTSTART:19700111T030000
TZOFFSETFROM:+1300
TZOFFSETTO:+1200
-RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=3SU
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=2SU
TZNAME:Fiji Standard Time
END:STANDARD
BEGIN:DAYLIGHT
@@ -905,6 +977,32 @@ TZNAME:Kamchatka Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC+12:45) Chatham Islands
+BEGIN:STANDARD
+DTSTART:19700405T034500
+TZOFFSETFROM:+1345
+TZOFFSETTO:+1245
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+TZNAME:Chatham Islands Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700927T024500
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+TZNAME:Chatham Islands Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC+13:00) Coordinated Universal Time+13
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+TZNAME:UTC+13
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC+13:00) Nuku'alofa
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -916,14 +1014,14 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC+13:00) Samoa
BEGIN:STANDARD
-DTSTART:19700405T010000
+DTSTART:19700405T040000
TZOFFSETFROM:+1400
TZOFFSETTO:+1300
RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
TZNAME:Samoa Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700927T000000
+DTSTART:19700927T030000
TZOFFSETFROM:+1300
TZOFFSETTO:+1400
RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
@@ -992,6 +1090,15 @@ TZNAME:Mid-Atlantic Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-03:00) Araguaina
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:Tocantins Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-03:00) Brasilia
BEGIN:STANDARD
DTSTART:19700221T235959
@@ -1001,29 +1108,29 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA
TZNAME:E. South America Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19701017T235959
+DTSTART:19701107T235959
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA
TZNAME:E. South America Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-03:00) Buenos Aires
+TZID:(UTC-03:00) Cayenne\, Fortaleza
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:Argentina Standard Time
+TZNAME:SA Eastern Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-03:00) Cayenne\, Fortaleza
+TZID:(UTC-03:00) City of Buenos Aires
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-TZNAME:SA Eastern Standard Time
+TZNAME:Argentina Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -1039,25 +1146,43 @@ BEGIN:DAYLIGHT
DTSTART:19700328T220000
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA
TZNAME:Greenland Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC-03:00) Montevideo
BEGIN:STANDARD
-DTSTART:19700308T020000
+DTSTART:19700101T000000
TZOFFSETFROM:-0200
TZOFFSETTO:-0300
-RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZNAME:Montevideo Standard Time
END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-03:00) Punta Arenas
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:Magallanes Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-03:00) Saint Pierre and Miquelon
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Saint Pierre Standard Time
+END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19701004T020000
+DTSTART:19700308T020000
TZOFFSETFROM:-0300
TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
-TZNAME:Montevideo Daylight Time
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Saint Pierre Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -1121,6 +1246,15 @@ TZNAME:Atlantic Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-04:00) Caracas
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:Venezuela Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-04:00) Cuiaba
BEGIN:STANDARD
DTSTART:19700221T235959
@@ -1130,10 +1264,10 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA
TZNAME:Central Brazilian Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19701017T235959
+DTSTART:19701107T235959
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA
TZNAME:Central Brazilian Daylight Time
END:DAYLIGHT
END:VTIMEZONE
@@ -1149,36 +1283,36 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC-04:00) Santiago
BEGIN:STANDARD
-DTSTART:19700425T235959
+DTSTART:19700509T235959
TZOFFSETFROM:-0300
TZOFFSETTO:-0400
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SA
+RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA
TZNAME:Pacific SA Standard Time
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700905T235959
+DTSTART:19700808T235959
TZOFFSETFROM:-0400
TZOFFSETTO:-0300
-RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA
+RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA
TZNAME:Pacific SA Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-04:30) Caracas
+TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco
BEGIN:STANDARD
DTSTART:19700101T000000
-TZOFFSETFROM:-0330
-TZOFFSETTO:-0430
-TZNAME:Venezuela Standard Time
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:SA Pacific Standard Time
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
-TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco
+TZID:(UTC-05:00) Chetumal
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
-TZNAME:SA Pacific Standard Time
+TZNAME:Eastern Standard Time (Mexico)
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
@@ -1199,6 +1333,40 @@ TZNAME:Eastern Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-05:00) Haiti
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Haiti Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700308T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Haiti Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-05:00) Havana
+BEGIN:STANDARD
+DTSTART:19701101T010000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Cuba Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700308T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Cuba Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-05:00) Indiana (East)
BEGIN:STANDARD
DTSTART:19701101T020000
@@ -1216,6 +1384,23 @@ TZNAME:US Eastern Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-05:00) Turks and Caicos
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Turks and Caicos Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700105T000000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO
+TZNAME:Turks and Caicos Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-06:00) Central America
BEGIN:STANDARD
DTSTART:19700101T000000
@@ -1242,6 +1427,23 @@ TZNAME:Central Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-06:00) Easter Island
+BEGIN:STANDARD
+DTSTART:19700509T220000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA
+TZNAME:Easter Island Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700808T220000
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA
+TZNAME:Easter Island Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-06:00) Guadalajara\, Mexico City\, Monterrey
BEGIN:STANDARD
DTSTART:19701025T020000
@@ -1313,21 +1515,30 @@ END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:(UTC-08:00) Baja California
BEGIN:STANDARD
-DTSTART:19701025T020000
+DTSTART:19701101T020000
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
-RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
TZNAME:Pacific Standard Time (Mexico)
END:STANDARD
BEGIN:DAYLIGHT
-DTSTART:19700405T020000
+DTSTART:19700308T020000
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
-RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
TZNAME:Pacific Daylight Time (Mexico)
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-08:00) Coordinated Universal Time-08
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:UTC-08
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-08:00) Pacific Time (US & Canada)
BEGIN:STANDARD
DTSTART:19701101T020000
@@ -1362,6 +1573,41 @@ TZNAME:Alaskan Daylight Time
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VTIMEZONE
+TZID:(UTC-09:00) Coordinated Universal Time-09
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:UTC-09
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-09:30) Marquesas Islands
+BEGIN:STANDARD
+DTSTART:19700101T000000
+TZOFFSETFROM:-0830
+TZOFFSETTO:-0930
+TZNAME:Marquesas Standard Time
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:(UTC-10:00) Aleutian Islands
+BEGIN:STANDARD
+DTSTART:19701101T020000
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+TZNAME:Aleutian Standard Time
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700308T020000
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+TZNAME:Aleutian Daylight Time
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
TZID:(UTC-10:00) Hawaii
BEGIN:STANDARD
DTSTART:19700101T000000
diff --git a/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb b/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb
index 210fa3e..b2627bd 100644
--- a/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb
+++ b/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : VTimeZoneTestForm.aspx.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 12/30/2014
-' Note : Copyright 2004-2014, Eric Woodruff, All rights reserved
+' Updated : 11/21/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Microsoft VB.NET
'
' This page is used to demonstrate some of the time zone features of the PDI classes
@@ -44,7 +44,7 @@ Namespace PDIWebDemoVB
' The time zone information is loaded in the Application_Start event in Global.asax. We'll
' acquire a reader lock on the time zone collection as it's possible other sessions could be
' parsing calendars with time zone data that could change the collection.
- VCalendar.TimeZones.Lock.AcquireReaderLock(250)
+ VCalendar.TimeZones.AcquireReaderLock(250)
Try
For Each tz In VCalendar.TimeZones
@@ -52,7 +52,7 @@ Namespace PDIWebDemoVB
cboDestTimeZone.Items.Add(tz.TimeZoneId.Value)
Next
Finally
- VCalendar.TimeZones.Lock.ReleaseReaderLock()
+ VCalendar.TimeZones.ReleaseReaderLock()
End Try
txtSourceDate.Text = New DateTime(DateTime.Today.Year, 1, 1, 10, 0, 0).ToString("G")
diff --git a/Source/VBNetDemos/PDIWebDemoVB/Web.config b/Source/VBNetDemos/PDIWebDemoVB/Web.config
index 9f04abe..02b3d30 100644
--- a/Source/VBNetDemos/PDIWebDemoVB/Web.config
+++ b/Source/VBNetDemos/PDIWebDemoVB/Web.config
@@ -1,32 +1,40 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh
index 459d1a6..9002601 100644
Binary files a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh and b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh differ
diff --git a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Web.Controls.dll.refresh b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Web.Controls.dll.refresh
deleted file mode 100644
index 4acbfb0..0000000
Binary files a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Web.Controls.dll.refresh and /dev/null differ
diff --git a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh
index dc27aeb..962275b 100644
Binary files a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh and b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh differ
diff --git a/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo b/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo
index 7e5e786..9b35a38 100644
--- a/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo
+++ b/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo
@@ -119,6 +119,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb b/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb
index 328f1f8..6b6b713 100644
--- a/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb
+++ b/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb
@@ -24,6 +24,15 @@
Public Partial Class MainForm
Inherits System.Windows.Forms.Form
+ '''
+ ''' The main entry point for the application
+ '''
+ Shared Sub Main(Args As String())
+ Application.EnableVisualStyles()
+ Application.SetCompatibleTextRenderingDefault(false)
+ Application.Run(new MainForm())
+ End Sub
+
'''
''' Constructor
'''
diff --git a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb
index 50c8a9b..88dd01c 100644
--- a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb
+++ b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
'
' This code was generated by a tool.
-' Runtime Version:4.0.30319.1
+' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -11,28 +11,3 @@
Option Strict On
Option Explicit On
-
-Namespace My
-
- 'NOTE: This file is auto-generated; do not modify it directly. To make changes,
- ' or if you encounter build errors in this file, go to the Project Designer
- ' (go to Project Properties or double-click the My Project node in
- ' Solution Explorer), and make changes on the Application tab.
- '
- Partial Friend Class MyApplication
-
- _
- Public Sub New()
- MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
- Me.IsSingleInstance = false
- Me.EnableVisualStyles = true
- Me.SaveMySettingsOnExit = false
- Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
- End Sub
-
- _
- Protected Overrides Sub OnCreateMainForm()
- Me.MainForm = Global.PDIWinFormsTest.MainForm
- End Sub
- End Class
-End Namespace
diff --git a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp
index 8d970f3..5916c7b 100644
--- a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp
+++ b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp
@@ -1,6 +1,6 @@
- true
+ false
MainForm
false
0
diff --git a/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj b/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj
index 0b397df..ff231a5 100644
--- a/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj
+++ b/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj
@@ -1,5 +1,5 @@
-
+
Local
8.0.50727
@@ -22,14 +22,14 @@
On
On
PDIWinFormsTest
- PDIWinFormsTest.My.MyApplication
+ PDIWinFormsTest.MainForm
- WindowsForms
+ WindowsFormsWithCustomSubMain
3.5
- v4.0
+ v4.7.2
publish\
true
@@ -67,6 +67,7 @@
42016,42017,42018,42019,42032,42353,42354,42355
full
..\..\EWSPDIDemos.ruleset
+ false
bin\
@@ -87,10 +88,14 @@
1
42016,42017,42018,42019,42032,42353,42354,42355
none
+ false
true
+
+ app.manifest
+
System
@@ -197,6 +202,7 @@
+
@@ -217,17 +223,17 @@
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
+
+ {4d1d331e-7475-4260-b9ad-8a31848a6054}
+ EWSoftware.PDI.Data
-
- {dbd186a2-8160-4bf3-92d4-61bf262f0ca2}
- EWSPDIWinForms
+
+ {1e7aaf3e-6978-4c69-a2fb-916af6f77d9e}
+ EWSoftware.PDI.Windows.Forms
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
+
+ {e4be35a2-31c3-4be1-a257-413fb78cdd9b}
+ EWSoftware.PDI
diff --git a/Source/VBNetDemos/PDIWinFormsTest/app.config b/Source/VBNetDemos/PDIWinFormsTest/app.config
index 793777f..9659fad 100644
--- a/Source/VBNetDemos/PDIWinFormsTest/app.config
+++ b/Source/VBNetDemos/PDIWinFormsTest/app.config
@@ -21,6 +21,9 @@
-
+
+
+
+
diff --git a/Source/VBNetDemos/PDIWinFormsTest/app.manifest b/Source/VBNetDemos/PDIWinFormsTest/app.manifest
new file mode 100644
index 0000000..5dbcd41
--- /dev/null
+++ b/Source/VBNetDemos/PDIWinFormsTest/app.manifest
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb b/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb
index 53f7422..d2a2e20 100644
--- a/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb
+++ b/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : AssemblyInfo.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 01/01/2015
-' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved
+' Updated : 11/20/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
' Assembly information for the demo application
diff --git a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb
index 516f0c2..e9f46f5 100644
--- a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb
+++ b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb
@@ -2,8 +2,8 @@
' System : EWSoftware PDI Demonstration Applications
' File : RFC2445RecurTest.vb
' Author : Eric Woodruff (Eric@EWoodruff.us)
-' Updated : 01/01/2015
-' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved
+' Updated : 11/11/2018
+' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved
' Compiler: Visual Basic .NET
'
' This creates the example recurrence patterns given in the RFC 2445 iCalendar specification starting on page 118
diff --git a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj
index 88f0028..0614687 100644
--- a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj
+++ b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj
@@ -1,160 +1,28 @@
-
-
+
+
- Local
- 8.0.50727
- 2.0
- {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}
- Debug
- AnyCPU
-
-
-
-
- RFC2445RecurTest
- RFC2445RecurTest.snk
- None
- JScript
- Grid
- IE50
- false
Exe
- Binary
- On
- On
- RFC2445RecurTest
- RFC2445RecurTest.RFC2445RecurTest
-
-
- Console
-
-
- 3.5
- v4.0
-
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- bin\
-
-
- 285212672
-
-
-
-
- true
- true
- true
- false
- false
- false
- false
- 1
- 42016,42017,42018,42019,42032,42353,42354,42355
- full
- ..\..\EWSPDIDemos.ruleset
-
-
- bin\
-
-
- 285212672
-
-
-
-
- false
- true
- false
- true
- false
- false
- false
- 1
- 42016,42017,42018,42019,42032,42353,42354,42355
- none
-
-
+ netcoreapp2.1
+ False
+ False
+ False
+ False
+ False
+ False
+ ProductAttribute
+ RFC2445RecurTest.snk
true
+ ..\..\EWSPDIDemos.ruleset
+ false
+
-
- System
-
-
- System.XML
-
-
-
-
-
+
+
-
- My Project\AssemblyInfoShared.vb
-
-
-
- Code
-
-
- Code
-
+
+
-
-
-
-
-
-
-
-
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
-
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
-
-
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
diff --git a/Source/VBNetDemos/RFC2445RecurTest/app.config b/Source/VBNetDemos/RFC2445RecurTest/app.config
deleted file mode 100644
index 793777f..0000000
--- a/Source/VBNetDemos/RFC2445RecurTest/app.config
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb b/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb
index b2a88ab..88dd01c 100644
--- a/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb
+++ b/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb
@@ -1,7 +1,7 @@
'------------------------------------------------------------------------------
'
' This code was generated by a tool.
-' Runtime Version:4.0.30319.1
+' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
@@ -11,28 +11,3 @@
Option Strict On
Option Explicit On
-
-Namespace My
-
- 'NOTE: This file is auto-generated; do not modify it directly. To make changes,
- ' or if you encounter build errors in this file, go to the Project Designer
- ' (go to Project Properties or double-click the My Project node in
- ' Solution Explorer), and make changes on the Application tab.
- '
- Partial Friend Class MyApplication
-
- _
- Public Sub New()
- MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
- Me.IsSingleInstance = false
- Me.EnableVisualStyles = true
- Me.SaveMySettingsOnExit = false
- Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
- End Sub
-
- _
- Protected Overrides Sub OnCreateMainForm()
- Me.MainForm = Global.vCardBrowser.VCardBrowserForm
- End Sub
- End Class
-End Namespace
diff --git a/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp b/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp
index ef2045a..e5a8767 100644
--- a/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp
+++ b/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp
@@ -1,6 +1,6 @@
- true
+ false
VCardBrowserForm
false
0
diff --git a/Source/VBNetDemos/vCardBrowser/PhotoControl.vb b/Source/VBNetDemos/vCardBrowser/PhotoControl.vb
index ab0d4b5..2c4329c 100644
--- a/Source/VBNetDemos/vCardBrowser/PhotoControl.vb
+++ b/Source/VBNetDemos/vCardBrowser/PhotoControl.vb
@@ -90,7 +90,7 @@ Public Partial Class PhotoControl
Try
bmImage.Dispose()
- If Not String.IsNullOrEmpty(value) Then
+ If Not String.IsNullOrWhiteSpace(value) Then
bmImage = New Bitmap(value)
Else
bmImage = new Bitmap(1, 1)
diff --git a/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb b/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb
index 870af7c..b36f4b2 100644
--- a/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb
+++ b/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb
@@ -44,6 +44,15 @@ Public Partial Class VCardBrowserForm
'===============================================================
+ '''
+ ''' The main entry point for the application
+ '''
+ Shared Sub Main(Args As String())
+ Application.EnableVisualStyles()
+ Application.SetCompatibleTextRenderingDefault(false)
+ Application.Run(new VCardBrowserForm())
+ End Sub
+
'''
''' Constructor
'''
@@ -117,13 +126,13 @@ Public Partial Class VCardBrowserForm
' existence.
sortName1 = x.SortString.Value
- If String.IsNullOrEmpty(sortName1) Then
+ If String.IsNullOrWhiteSpace(sortName1) Then
sortName1 = x.Name.SortableName
End If
sortName2 = y.SortString.Value
- If String.IsNullOrEmpty(sortName2) Then
+ If String.IsNullOrWhiteSpace(sortName2) Then
sortName2 = y.Name.SortableName
End If
diff --git a/Source/VBNetDemos/vCardBrowser/app.config b/Source/VBNetDemos/vCardBrowser/app.config
index 793777f..9659fad 100644
--- a/Source/VBNetDemos/vCardBrowser/app.config
+++ b/Source/VBNetDemos/vCardBrowser/app.config
@@ -21,6 +21,9 @@
-
+
+
+
+
diff --git a/Source/VBNetDemos/vCardBrowser/app.manifest b/Source/VBNetDemos/vCardBrowser/app.manifest
new file mode 100644
index 0000000..5dbcd41
--- /dev/null
+++ b/Source/VBNetDemos/vCardBrowser/app.manifest
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj b/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj
index 1d87a25..c15eb48 100644
--- a/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj
+++ b/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj
@@ -1,5 +1,5 @@
-
+
Local
8.0.50727
@@ -22,14 +22,14 @@
On
On
vCardBrowser
- vCardBrowser.My.MyApplication
+ vCardBrowser.VCardBrowserForm
- WindowsForms
+ WindowsFormsWithCustomSubMain
3.5
- v4.0
+ v4.7.2
publish\
true
@@ -67,6 +67,7 @@
42016,42017,42018,42019,42032,42353,42354,42355
full
..\..\EWSPDIDemos.ruleset
+ false
bin\
@@ -87,10 +88,14 @@
1
42016,42017,42018,42019,42032,42353,42354,42355
none
+ false
true
+
+ app.manifest
+
System
@@ -217,6 +222,7 @@
+
@@ -237,17 +243,17 @@
-
- {13eb4641-36a6-4c9c-af8c-29f3763d392f}
- EWSPDIData
+
+ {4d1d331e-7475-4260-b9ad-8a31848a6054}
+ EWSoftware.PDI.Data
-
- {dbd186a2-8160-4bf3-92d4-61bf262f0ca2}
- EWSPDIWinForms
+
+ {1e7aaf3e-6978-4c69-a2fb-916af6f77d9e}
+ EWSoftware.PDI.Windows.Forms
-
- {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}
- EWSPDI
+
+ {e4be35a2-31c3-4be1-a257-413fb78cdd9b}
+ EWSoftware.PDI