diff --git a/.editorconfig b/.editorconfig index f4e80303..48dbbbd3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -561,7 +561,6 @@ dotnet_diagnostic.S6603.severity = none # The collection-specific "T dotnet_diagnostic.S6605.severity = none # Collection-specific "Exists" method should be used instead of the "Any" dotnet_diagnostic.S6964.severity = none # Value type property used as input in a controller action should be nullable, required or annotated with the JsonRequiredAttribute to avoid under-posting. - ########################################## # Custom - File Extension Settings ########################################## diff --git a/CLAUDE.md b/CLAUDE.md index d342ee36..7da8ccfc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -104,8 +104,8 @@ sample/Atc.Wpf.Sample/ # Demo application - Framework: XUnit 3 with Microsoft Testing Platform - WPF-specific testing: Xunit.StaFact (for STA thread tests) -- Test utilities: Atc.XUnit, AutoFixture, FluentAssertions, NSubstitute -- Global usings for test projects include: AutoFixture, FluentAssertions, NSubstitute, Xunit +- Test utilities: Atc.XUnit, AutoFixture, AwesomeAssertions, NSubstitute +- Global usings for test projects include: AutoFixture, AwesomeAssertions, NSubstitute, Xunit ### Test Projects Structure diff --git a/Directory.Build.props b/Directory.Build.props index ad47dc33..2c528777 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -56,9 +56,9 @@ - + - + \ No newline at end of file diff --git a/sample/Atc.Wpf.Sample/Atc.Wpf.Sample.csproj b/sample/Atc.Wpf.Sample/Atc.Wpf.Sample.csproj index fa59c82e..12757fe5 100644 --- a/sample/Atc.Wpf.Sample/Atc.Wpf.Sample.csproj +++ b/sample/Atc.Wpf.Sample/Atc.Wpf.Sample.csproj @@ -51,14 +51,14 @@ - + - - - - + + + + diff --git a/sample/Atc.Wpf.Sample/SamplesWpfForms/LabelControls/LabelEndpointBoxView.xaml b/sample/Atc.Wpf.Sample/SamplesWpfForms/LabelControls/LabelEndpointBoxView.xaml index bc535ce2..419a83dd 100644 --- a/sample/Atc.Wpf.Sample/SamplesWpfForms/LabelControls/LabelEndpointBoxView.xaml +++ b/sample/Atc.Wpf.Sample/SamplesWpfForms/LabelControls/LabelEndpointBoxView.xaml @@ -82,7 +82,42 @@ Grid.Column="1" Margin="10" Orientation="Vertical" - Spacing="10" /> + Spacing="10"> + + + + + + + + diff --git a/src/Atc.Wpf.Components/Atc.Wpf.Components.csproj b/src/Atc.Wpf.Components/Atc.Wpf.Components.csproj index 22b1504b..77313904 100644 --- a/src/Atc.Wpf.Components/Atc.Wpf.Components.csproj +++ b/src/Atc.Wpf.Components/Atc.Wpf.Components.csproj @@ -44,7 +44,7 @@ - + diff --git a/src/Atc.Wpf.Controls.Sample/Atc.Wpf.Controls.Sample.csproj b/src/Atc.Wpf.Controls.Sample/Atc.Wpf.Controls.Sample.csproj index 30a2ee9f..abd5c7c4 100644 --- a/src/Atc.Wpf.Controls.Sample/Atc.Wpf.Controls.Sample.csproj +++ b/src/Atc.Wpf.Controls.Sample/Atc.Wpf.Controls.Sample.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/Atc.Wpf.Controls/Atc.Wpf.Controls.csproj b/src/Atc.Wpf.Controls/Atc.Wpf.Controls.csproj index c693e648..6411e228 100644 --- a/src/Atc.Wpf.Controls/Atc.Wpf.Controls.csproj +++ b/src/Atc.Wpf.Controls/Atc.Wpf.Controls.csproj @@ -40,7 +40,7 @@ - + diff --git a/src/Atc.Wpf.Forms/Atc.Wpf.Forms.csproj b/src/Atc.Wpf.Forms/Atc.Wpf.Forms.csproj index 1b27146b..3c889627 100644 --- a/src/Atc.Wpf.Forms/Atc.Wpf.Forms.csproj +++ b/src/Atc.Wpf.Forms/Atc.Wpf.Forms.csproj @@ -28,7 +28,7 @@ - + diff --git a/src/Atc.Wpf.Forms/Enums/NetworkValidationRule.cs b/src/Atc.Wpf.Forms/Enums/NetworkValidationRule.cs index ccd3cc2d..7e20c9e6 100644 --- a/src/Atc.Wpf.Forms/Enums/NetworkValidationRule.cs +++ b/src/Atc.Wpf.Forms/Enums/NetworkValidationRule.cs @@ -8,4 +8,8 @@ public enum NetworkValidationRule IPAddress, IPv4Address, IPv6Address, + Hostname, + IPv4AddressOrHostname, + IPv6AddressOrHostname, + IPAddressOrHostname, } \ No newline at end of file diff --git a/src/Atc.Wpf.Forms/Enums/TextBoxValidationRuleType.cs b/src/Atc.Wpf.Forms/Enums/TextBoxValidationRuleType.cs index 70f49ee6..b4fafb54 100644 --- a/src/Atc.Wpf.Forms/Enums/TextBoxValidationRuleType.cs +++ b/src/Atc.Wpf.Forms/Enums/TextBoxValidationRuleType.cs @@ -72,6 +72,26 @@ public enum TextBoxValidationRuleType /// IPv6Address, + /// + /// Validates DNS host name format only (RFC 1123). + /// + Hostname, + + /// + /// Validates IPv4 address or DNS host name format. + /// + IPv4AddressOrHostname, + + /// + /// Validates IPv6 address or DNS host name format. + /// + IPv6AddressOrHostname, + + /// + /// Validates IPv4/IPv6 address or DNS host name format. + /// + IPAddressOrHostname, + /// /// Validates OPC TCP URL format. /// diff --git a/src/Atc.Wpf.Forms/GlobalUsings.cs b/src/Atc.Wpf.Forms/GlobalUsings.cs index 78393eeb..aca1a43b 100644 --- a/src/Atc.Wpf.Forms/GlobalUsings.cs +++ b/src/Atc.Wpf.Forms/GlobalUsings.cs @@ -6,8 +6,6 @@ global using System.Diagnostics.CodeAnalysis; global using System.Globalization; global using System.IO; -global using System.Net; -global using System.Net.Sockets; global using System.Reflection; global using System.Runtime.CompilerServices; global using System.Text; diff --git a/src/Atc.Wpf.Forms/Internal/Helpers/EndpointBoxValidationHelper.cs b/src/Atc.Wpf.Forms/Internal/Helpers/EndpointBoxValidationHelper.cs index 9476bd7a..3df2ff83 100644 --- a/src/Atc.Wpf.Forms/Internal/Helpers/EndpointBoxValidationHelper.cs +++ b/src/Atc.Wpf.Forms/Internal/Helpers/EndpointBoxValidationHelper.cs @@ -24,6 +24,10 @@ public static TextBoxValidationRuleType MapNetworkValidationRuleToValidationType NetworkValidationRule.IPAddress => TextBoxValidationRuleType.IPAddress, NetworkValidationRule.IPv4Address => TextBoxValidationRuleType.IPv4Address, NetworkValidationRule.IPv6Address => TextBoxValidationRuleType.IPv6Address, + NetworkValidationRule.Hostname => TextBoxValidationRuleType.Hostname, + NetworkValidationRule.IPv4AddressOrHostname => TextBoxValidationRuleType.IPv4AddressOrHostname, + NetworkValidationRule.IPv6AddressOrHostname => TextBoxValidationRuleType.IPv6AddressOrHostname, + NetworkValidationRule.IPAddressOrHostname => TextBoxValidationRuleType.IPAddressOrHostname, _ => TextBoxValidationRuleType.None, }; diff --git a/src/Atc.Wpf.Forms/Internal/Helpers/TextBoxValidationHelper.cs b/src/Atc.Wpf.Forms/Internal/Helpers/TextBoxValidationHelper.cs index 16ec3f4b..e77064dc 100644 --- a/src/Atc.Wpf.Forms/Internal/Helpers/TextBoxValidationHelper.cs +++ b/src/Atc.Wpf.Forms/Internal/Helpers/TextBoxValidationHelper.cs @@ -51,13 +51,25 @@ public static (bool IsValid, string ErrorMessage) Validate( ValidateHexArgb(value, ref isValid, ref errorMessage); break; case TextBoxValidationRuleType.IPAddress: - ValidateIpAddress(value, ref isValid, ref errorMessage, allowV4: true, allowV6: true); + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: true, allowV6: true, allowHostname: false); break; case TextBoxValidationRuleType.IPv4Address: - ValidateIpAddress(value, ref isValid, ref errorMessage, allowV4: true, allowV6: false); + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: true, allowV6: false, allowHostname: false); break; case TextBoxValidationRuleType.IPv6Address: - ValidateIpAddress(value, ref isValid, ref errorMessage, allowV4: false, allowV6: true); + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: false, allowV6: true, allowHostname: false); + break; + case TextBoxValidationRuleType.Hostname: + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: false, allowV6: false, allowHostname: true); + break; + case TextBoxValidationRuleType.IPv4AddressOrHostname: + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: true, allowV6: false, allowHostname: true); + break; + case TextBoxValidationRuleType.IPv6AddressOrHostname: + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: false, allowV6: true, allowHostname: true); + break; + case TextBoxValidationRuleType.IPAddressOrHostname: + ValidateHostOrIp(value, ref isValid, ref errorMessage, allowV4: true, allowV6: true, allowHostname: true); break; case TextBoxValidationRuleType.OpcTcp: ValidateOpcTcp(value, ref isValid, ref errorMessage); @@ -176,33 +188,49 @@ private static void ValidateHexArgb( errorMessage = Validations.InvalidHexArgb; } - private static void ValidateIpAddress( + private static void ValidateHostOrIp( string? value, ref bool isValid, ref string errorMessage, bool allowV4, - bool allowV6) + bool allowV6, + bool allowHostname) { - if (IPAddress.TryParse(value, out var ipAddress)) + if (!string.IsNullOrEmpty(value)) { - if (allowV4 && allowV6) + if (allowV4 && value.IsIPv4Address()) { return; } - if (allowV4 && ipAddress.AddressFamily == AddressFamily.InterNetwork) + if (allowV6 && value.IsIPv6Address()) { return; } - if (allowV6 && ipAddress.AddressFamily == AddressFamily.InterNetworkV6) + // A dotted-numeric string (e.g. "192.168.0.27") is syntactically a valid + // host name, so an IP address is explicitly excluded here; IP input is only + // accepted via the allowV4/allowV6 branches above. + if (allowHostname && value.IsHostName() && !value.IsIPAddress()) { return; } } isValid = false; - errorMessage = Validations.InvalidIpAddres; + + if (!allowHostname) + { + errorMessage = Validations.InvalidIpAddres; + } + else if (allowV4 || allowV6) + { + errorMessage = Validations.InvalidHostnameOrIpAddress; + } + else + { + errorMessage = Validations.InvalidHostname; + } } private static void ValidateOpcTcp( diff --git a/src/Atc.Wpf.Forms/Readme.md b/src/Atc.Wpf.Forms/Readme.md index 3ee55961..aac7222f 100644 --- a/src/Atc.Wpf.Forms/Readme.md +++ b/src/Atc.Wpf.Forms/Readme.md @@ -846,7 +846,7 @@ A labeled control for entering network endpoints (protocol + host + port) with v | `WatermarkText` | `string` | `"localhost"` | Placeholder text for the host field | | `ShowClearTextButton` | `bool` | `true` | Show/hide the clear button in host field | | `HideUpDownButtons` | `bool` | `true` | Show/hide increment/decrement buttons for port | -| `NetworkValidation` | `NetworkValidationRule` | `None` | Additional validation rule for host (IPv4Address, IPv6Address, etc.) | +| `NetworkValidation` | `NetworkValidationRule` | `None` | Additional validation rule for host. One of: `None`, `IPAddress`, `IPv4Address`, `IPv6Address`, `Hostname`, `IPv4AddressOrHostname`, `IPv6AddressOrHostname`, `IPAddressOrHostname` | | `MinimumPort` | `int` | `1` | Minimum allowed port number | | `MaximumPort` | `int` | `65535` | Maximum allowed port number | @@ -870,6 +870,17 @@ A labeled control for entering network endpoints (protocol + host + port) with v IsMandatory="True" WatermarkText="192.168.1.1" /> + + + + /// Looks up a localized string similar to Invalid host name. + /// + public static string InvalidHostname { + get { + return ResourceManager.GetString("InvalidHostname", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid host name or IP address. + /// + public static string InvalidHostnameOrIpAddress { + get { + return ResourceManager.GetString("InvalidHostnameOrIpAddress", resourceCulture); + } + } + /// /// Looks up a localized string similar to Invalid IP address. /// diff --git a/src/Atc.Wpf.Forms/Resources/Validations.da-DK.resx b/src/Atc.Wpf.Forms/Resources/Validations.da-DK.resx index 5571fe77..e30d23ff 100644 --- a/src/Atc.Wpf.Forms/Resources/Validations.da-DK.resx +++ b/src/Atc.Wpf.Forms/Resources/Validations.da-DK.resx @@ -129,6 +129,12 @@ Ugyldig HTTP webadresse + + Ugyldigt værtsnavn + + + Ugyldigt værtsnavn eller IP addresse + Ugyldig IP addresse diff --git a/src/Atc.Wpf.Forms/Resources/Validations.de-DE.resx b/src/Atc.Wpf.Forms/Resources/Validations.de-DE.resx index 457b28a4..e78ca00a 100644 --- a/src/Atc.Wpf.Forms/Resources/Validations.de-DE.resx +++ b/src/Atc.Wpf.Forms/Resources/Validations.de-DE.resx @@ -129,6 +129,12 @@ Ungültige HTTP-URL + + Ungültiger Hostname + + + Ungültiger Hostname oder IP-Adresse + Ungültige IP-Adresse diff --git a/src/Atc.Wpf.Forms/Resources/Validations.resx b/src/Atc.Wpf.Forms/Resources/Validations.resx index 09dfe59e..0c1db601 100644 --- a/src/Atc.Wpf.Forms/Resources/Validations.resx +++ b/src/Atc.Wpf.Forms/Resources/Validations.resx @@ -150,6 +150,12 @@ Invalid HTTP url + + Invalid host name + + + Invalid host name or IP address + Invalid IP address diff --git a/src/Atc.Wpf.Hardware/Atc.Wpf.Hardware.csproj b/src/Atc.Wpf.Hardware/Atc.Wpf.Hardware.csproj index 794d1070..b6b81611 100644 --- a/src/Atc.Wpf.Hardware/Atc.Wpf.Hardware.csproj +++ b/src/Atc.Wpf.Hardware/Atc.Wpf.Hardware.csproj @@ -19,7 +19,7 @@ - + diff --git a/src/Atc.Wpf.Network/Atc.Wpf.Network.csproj b/src/Atc.Wpf.Network/Atc.Wpf.Network.csproj index 42ca4ded..9b490720 100644 --- a/src/Atc.Wpf.Network/Atc.Wpf.Network.csproj +++ b/src/Atc.Wpf.Network/Atc.Wpf.Network.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/Atc.Wpf.Theming/Atc.Wpf.Theming.csproj b/src/Atc.Wpf.Theming/Atc.Wpf.Theming.csproj index bcb51866..8060532d 100644 --- a/src/Atc.Wpf.Theming/Atc.Wpf.Theming.csproj +++ b/src/Atc.Wpf.Theming/Atc.Wpf.Theming.csproj @@ -30,7 +30,7 @@ - + @@ -38,7 +38,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Atc.Wpf.UndoRedo/Atc.Wpf.UndoRedo.csproj b/src/Atc.Wpf.UndoRedo/Atc.Wpf.UndoRedo.csproj index 57160432..501c26ab 100644 --- a/src/Atc.Wpf.UndoRedo/Atc.Wpf.UndoRedo.csproj +++ b/src/Atc.Wpf.UndoRedo/Atc.Wpf.UndoRedo.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/Atc.Wpf/Atc.Wpf.csproj b/src/Atc.Wpf/Atc.Wpf.csproj index 0036940d..cb6c8a42 100644 --- a/src/Atc.Wpf/Atc.Wpf.csproj +++ b/src/Atc.Wpf/Atc.Wpf.csproj @@ -29,7 +29,7 @@ - + diff --git a/src/Directory.Build.props b/src/Directory.Build.props index edc3abf9..c29e7f62 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -53,8 +53,8 @@ - - + + \ No newline at end of file diff --git a/test/Atc.Wpf.Components.Tests/Atc.Wpf.Components.Tests.csproj b/test/Atc.Wpf.Components.Tests/Atc.Wpf.Components.Tests.csproj index 1c977bbb..234c1c21 100644 --- a/test/Atc.Wpf.Components.Tests/Atc.Wpf.Components.Tests.csproj +++ b/test/Atc.Wpf.Components.Tests/Atc.Wpf.Components.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.Controls.Tests/Atc.Wpf.Controls.Tests.csproj b/test/Atc.Wpf.Controls.Tests/Atc.Wpf.Controls.Tests.csproj index d4ff875c..ac9c5b3c 100644 --- a/test/Atc.Wpf.Controls.Tests/Atc.Wpf.Controls.Tests.csproj +++ b/test/Atc.Wpf.Controls.Tests/Atc.Wpf.Controls.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.FontIcons.Tests/Atc.Wpf.FontIcons.Tests.csproj b/test/Atc.Wpf.FontIcons.Tests/Atc.Wpf.FontIcons.Tests.csproj index 6db15441..be4433b8 100644 --- a/test/Atc.Wpf.FontIcons.Tests/Atc.Wpf.FontIcons.Tests.csproj +++ b/test/Atc.Wpf.FontIcons.Tests/Atc.Wpf.FontIcons.Tests.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/test/Atc.Wpf.Forms.Tests/Atc.Wpf.Forms.Tests.csproj b/test/Atc.Wpf.Forms.Tests/Atc.Wpf.Forms.Tests.csproj index dbfd180e..a2acb5ae 100644 --- a/test/Atc.Wpf.Forms.Tests/Atc.Wpf.Forms.Tests.csproj +++ b/test/Atc.Wpf.Forms.Tests/Atc.Wpf.Forms.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.Forms.Tests/Internal/Helpers/TextBoxValidationHelperTests.cs b/test/Atc.Wpf.Forms.Tests/Internal/Helpers/TextBoxValidationHelperTests.cs index 2820fc86..8c2426e8 100644 --- a/test/Atc.Wpf.Forms.Tests/Internal/Helpers/TextBoxValidationHelperTests.cs +++ b/test/Atc.Wpf.Forms.Tests/Internal/Helpers/TextBoxValidationHelperTests.cs @@ -35,6 +35,29 @@ public sealed class TextBoxValidationHelperTests [InlineData(TextBoxValidationRuleType.PasswordStrong, false, "Password must contain at least one digit", "MyPasswordOnly!")] [InlineData(TextBoxValidationRuleType.PasswordStrong, false, "Password must contain at least one special character", "MyPassword123")] [InlineData(TextBoxValidationRuleType.PasswordStrong, false, "Password is too short", "")] + [InlineData(TextBoxValidationRuleType.IPAddress, true, "", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.IPAddress, true, "", "::1")] + [InlineData(TextBoxValidationRuleType.IPAddress, false, "Invalid IP address", "opcua.demo-this.com")] + [InlineData(TextBoxValidationRuleType.IPv4Address, true, "", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.IPv4Address, false, "Invalid IP address", "::1")] + [InlineData(TextBoxValidationRuleType.IPv4Address, false, "Invalid IP address", "opcua.demo-this.com")] + [InlineData(TextBoxValidationRuleType.IPv6Address, true, "", "::1")] + [InlineData(TextBoxValidationRuleType.IPv6Address, false, "Invalid IP address", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.Hostname, true, "", "opcua.demo-this.com")] + [InlineData(TextBoxValidationRuleType.Hostname, true, "", "localhost")] + [InlineData(TextBoxValidationRuleType.Hostname, false, "Invalid host name", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.Hostname, false, "Invalid host name", "under_score.com")] + [InlineData(TextBoxValidationRuleType.IPv4AddressOrHostname, true, "", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.IPv4AddressOrHostname, true, "", "opcua.demo-this.com")] + [InlineData(TextBoxValidationRuleType.IPv4AddressOrHostname, false, "Invalid host name or IP address", "::1")] + [InlineData(TextBoxValidationRuleType.IPv4AddressOrHostname, false, "Invalid host name or IP address", "under_score.com")] + [InlineData(TextBoxValidationRuleType.IPv6AddressOrHostname, true, "", "::1")] + [InlineData(TextBoxValidationRuleType.IPv6AddressOrHostname, true, "", "opcua.demo-this.com")] + [InlineData(TextBoxValidationRuleType.IPv6AddressOrHostname, false, "Invalid host name or IP address", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.IPAddressOrHostname, true, "", "192.168.0.27")] + [InlineData(TextBoxValidationRuleType.IPAddressOrHostname, true, "", "::1")] + [InlineData(TextBoxValidationRuleType.IPAddressOrHostname, true, "", "opcua.demo-this.com")] + [InlineData(TextBoxValidationRuleType.IPAddressOrHostname, false, "Invalid host name or IP address", "under_score.com")] public void Validate( TextBoxValidationRuleType ruleType, bool expectedIsValid, diff --git a/test/Atc.Wpf.Hardware.Tests/Atc.Wpf.Hardware.Tests.csproj b/test/Atc.Wpf.Hardware.Tests/Atc.Wpf.Hardware.Tests.csproj index cb69d010..9d8c24ec 100644 --- a/test/Atc.Wpf.Hardware.Tests/Atc.Wpf.Hardware.Tests.csproj +++ b/test/Atc.Wpf.Hardware.Tests/Atc.Wpf.Hardware.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.Network.Tests/Atc.Wpf.Network.Tests.csproj b/test/Atc.Wpf.Network.Tests/Atc.Wpf.Network.Tests.csproj index 580e37f0..4f6af8de 100644 --- a/test/Atc.Wpf.Network.Tests/Atc.Wpf.Network.Tests.csproj +++ b/test/Atc.Wpf.Network.Tests/Atc.Wpf.Network.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.Tests/Atc.Wpf.Tests.csproj b/test/Atc.Wpf.Tests/Atc.Wpf.Tests.csproj index 4679956a..5bb9d5bf 100644 --- a/test/Atc.Wpf.Tests/Atc.Wpf.Tests.csproj +++ b/test/Atc.Wpf.Tests/Atc.Wpf.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.Theming.Tests/Atc.Wpf.Theming.Tests.csproj b/test/Atc.Wpf.Theming.Tests/Atc.Wpf.Theming.Tests.csproj index b5f9f0c2..6373a402 100644 --- a/test/Atc.Wpf.Theming.Tests/Atc.Wpf.Theming.Tests.csproj +++ b/test/Atc.Wpf.Theming.Tests/Atc.Wpf.Theming.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Atc.Wpf.UiTests/Atc.Wpf.UiTests.csproj b/test/Atc.Wpf.UiTests/Atc.Wpf.UiTests.csproj index 2dab18e5..6f0091eb 100644 --- a/test/Atc.Wpf.UiTests/Atc.Wpf.UiTests.csproj +++ b/test/Atc.Wpf.UiTests/Atc.Wpf.UiTests.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/test/Atc.Wpf.UndoRedo.Tests/Atc.Wpf.UndoRedo.Tests.csproj b/test/Atc.Wpf.UndoRedo.Tests/Atc.Wpf.UndoRedo.Tests.csproj index a6ea7e84..73182b92 100644 --- a/test/Atc.Wpf.UndoRedo.Tests/Atc.Wpf.UndoRedo.Tests.csproj +++ b/test/Atc.Wpf.UndoRedo.Tests/Atc.Wpf.UndoRedo.Tests.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/test/Directory.Build.props b/test/Directory.Build.props index 4c7704c0..658574b2 100644 --- a/test/Directory.Build.props +++ b/test/Directory.Build.props @@ -16,11 +16,11 @@ - + - - - + + + all @@ -32,7 +32,7 @@ - + diff --git a/tool/Atc.Wpf.Generator.FontIconResources/Atc.Wpf.Generator.FontIconResources.csproj b/tool/Atc.Wpf.Generator.FontIconResources/Atc.Wpf.Generator.FontIconResources.csproj index dd7beb0c..2c3fe298 100644 --- a/tool/Atc.Wpf.Generator.FontIconResources/Atc.Wpf.Generator.FontIconResources.csproj +++ b/tool/Atc.Wpf.Generator.FontIconResources/Atc.Wpf.Generator.FontIconResources.csproj @@ -9,14 +9,14 @@ - + - - - + + +