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 @@
-
+
-
-
-
+
+
+