From 1c63c2784b4a32654f14e19ab4dd5538ff5af07a Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Mon, 14 Sep 2026 15:54:54 +0200 Subject: [PATCH 1/2] Embedded resources in .NET: retarget to net10.0, rename the library project, add the folder-mangling case - All three projects move from net8.0 to net10.0. - MSTest 3.1.1 -> 4.4.0, Microsoft.NET.Test.Sdk 17.8.0 -> 18.10.0, coverlet.collector 6.0.0 -> 10.0.1. - Fix the swapped Assert.AreEqual arguments that MSTest 4 flags as MSTEST0017. - Rename Embedded_Resources_in_NET_Satellite to Embedded_Resources_in_NET_Library: the project is an ordinary referenced class library, not a satellite assembly. - Add my-folder/note.txt and a test asserting it embeds as Embedded_Resources_in_NET.my_folder.note.txt. - Remove three unused usings and one dead commented-out EmbeddedResource item. --- .../Embedded_Resources_in_NET.sln | 2 +- .../Embedded_Resources_in_NET.csproj | 6 +++--- .../SampleResourceReader.cs | 5 ++--- .../my-folder/note.txt | 1 + .../Embedded_Resources_in_NET_Library.csproj} | 2 +- .../Resources/text-file.txt | 0 .../Tests/SampleResourceReaderUnitTests.cs | 19 +++++++++++++------ .../Tests/Tests.csproj | 10 +++++----- 8 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/my-folder/note.txt rename csharp-intermediate-topics/Embedded_Resources_in_NET/{Embedded_Resources_in_NET_Satellite/Embedded_Resources_in_NET_Satellite.csproj => Embedded_Resources_in_NET_Library/Embedded_Resources_in_NET_Library.csproj} (87%) rename csharp-intermediate-topics/Embedded_Resources_in_NET/{Embedded_Resources_in_NET_Satellite => Embedded_Resources_in_NET_Library}/Resources/text-file.txt (100%) diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET.sln b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET.sln index 5f580f8911..5a753c25a6 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET.sln +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET.sln @@ -9,7 +9,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{012FD0FC-6ADA-4E07-A1D8-E74B60F462F7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Embedded_Resources_in_NET_Satellite", "Embedded_Resources_in_NET_Satellite\Embedded_Resources_in_NET_Satellite.csproj", "{C3E1AC81-3838-49AB-9736-32CFF5A371BB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Embedded_Resources_in_NET_Library", "Embedded_Resources_in_NET_Library\Embedded_Resources_in_NET_Library.csproj", "{C3E1AC81-3838-49AB-9736-32CFF5A371BB}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Embedded_Resources_in_NET.csproj b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Embedded_Resources_in_NET.csproj index 5e42d4a07d..2a64e56c98 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Embedded_Resources_in_NET.csproj +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Embedded_Resources_in_NET.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net10.0 enable enable @@ -11,13 +11,13 @@ + - - + diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs index f2b3fe3cbe..2963265eda 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs @@ -1,5 +1,4 @@ -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; +using System.Diagnostics; using System.Reflection; namespace Embedded_Resources_in_NET; @@ -63,7 +62,7 @@ private static Assembly[] AllAssembliesOfCurrentAppDomain => AppDomain.CurrentDomain.GetAssemblies(); private static Assembly SatelliteAssembly => - Assembly.Load("Embedded_Resources_in_NET_Satellite"); + Assembly.Load("Embedded_Resources_in_NET_Library"); private static Stream? FindResourceByName(string resourceName) => FindResource(names => names?.FirstOrDefault(rn => rn == resourceName)); diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/my-folder/note.txt b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/my-folder/note.txt new file mode 100644 index 0000000000..bf962d9558 --- /dev/null +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/my-folder/note.txt @@ -0,0 +1 @@ +This note lives in a folder whose name is not a valid identifier. diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Satellite/Embedded_Resources_in_NET_Satellite.csproj b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Library/Embedded_Resources_in_NET_Library.csproj similarity index 87% rename from csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Satellite/Embedded_Resources_in_NET_Satellite.csproj rename to csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Library/Embedded_Resources_in_NET_Library.csproj index 49c91377b4..09c2d51387 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Satellite/Embedded_Resources_in_NET_Satellite.csproj +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Library/Embedded_Resources_in_NET_Library.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Satellite/Resources/text-file.txt b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Library/Resources/text-file.txt similarity index 100% rename from csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Satellite/Resources/text-file.txt rename to csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET_Library/Resources/text-file.txt diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs b/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs index 5c460f82b1..a57f825b18 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs @@ -1,6 +1,4 @@ using Embedded_Resources_in_NET; -using Microsoft.VisualStudio.TestPlatform.Utilities; -using System.Reflection; namespace Tests; @@ -8,16 +6,25 @@ namespace Tests; public class SampleResourceReaderTests { [TestMethod] - public void GivenMainAssembly_WhenRunningListResourcesInThisAssembly_ThenExpect8LinesInConsole() + public void GivenMainAssembly_WhenRunningListResourcesInThisAssembly_ThenExpect9LinesInConsole() { var (content, noLines) = GetConsoleOutput(SampleResourceReader.ListResourcesInThisAssembly); - var expectedLines = 8; + var expectedLines = 9; var expectedText = "Embedded_Resources_in_NET.Embedded_Resources_in_NET.sln"; Assert.AreEqual(expectedLines, noLines); StringAssert.Contains(content, expectedText); } + [TestMethod] + public void GivenFolderNameThatIsNotAnIdentifier_WhenRunningListResourcesInThisAssembly_ThenExpectMangledName() + { + var (content, _) = GetConsoleOutput(SampleResourceReader.ListResourcesInThisAssembly); + var expectedText = "Embedded_Resources_in_NET.my_folder.note.txt"; + + StringAssert.Contains(content, expectedText); + } + [TestMethod] public void GivenMainAssembly_WhenRunningListResourcesInAllAssemblies_ThenExpectKnownContent() { @@ -34,7 +41,7 @@ public void GivenSatelliteAssembly_WhenRunningListResourcesInOurSatelliteAssembl { var (content, noLines) = GetConsoleOutput(SampleResourceReader.ListResourcesInOurSatelliteAssembly); var expectedLines = 4; - var expectedText = "Embedded_Resources_in_NET_Satellite.Resources.text-file.txt"; + var expectedText = "Embedded_Resources_in_NET_Library.Resources.text-file.txt"; Assert.AreEqual(expectedLines, noLines); StringAssert.Contains(content, expectedText); @@ -59,7 +66,7 @@ public void GivenIncorrectResourceName_WhenRunningFindResourceByNameAndDisplayIt var expectedText = ""; Assert.AreEqual(expectedLines, noLines); - Assert.AreEqual(content, expectedText); + Assert.AreEqual(expectedText, content); } private static (string content, int noLines) GetConsoleOutput(Action action) diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/Tests.csproj b/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/Tests.csproj index 7af1aa96de..840488ab07 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/Tests.csproj +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable @@ -10,10 +10,10 @@ - - - - + + + + From 92ffbc2f85edf9e03a8b12cd26460dfd58f42c99 Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Mon, 14 Sep 2026 15:56:48 +0200 Subject: [PATCH 2/2] Drop the satellite wording from the sample's member names too The project is a referenced class library, so SatelliteAssembly becomes ReferencedAssembly and ListResourcesInOurSatelliteAssembly becomes ListResourcesInReferencedAssembly, with the test name and the console banner following them. --- .../Embedded_Resources_in_NET/Program.cs | 4 ++-- .../Embedded_Resources_in_NET/SampleResourceReader.cs | 6 +++--- .../Tests/SampleResourceReaderUnitTests.cs | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Program.cs b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Program.cs index 6bef768071..cdcc183592 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Program.cs +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/Program.cs @@ -8,8 +8,8 @@ SampleResourceReader.ListResourcesInAllAssemblies(); WaitForUser(); -Console.WriteLine("\n\nResources in our satellite assembly:\n\n"); -SampleResourceReader.ListResourcesInOurSatelliteAssembly(); +Console.WriteLine("\n\nResources in our referenced assembly:\n\n"); +SampleResourceReader.ListResourcesInReferencedAssembly(); WaitForUser(); Console.WriteLine("\n\nFind resource by name and display it:\n\n"); diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs index 2963265eda..f9b2a278b9 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Embedded_Resources_in_NET/SampleResourceReader.cs @@ -11,8 +11,8 @@ public static void ListResourcesInThisAssembly() public static void ListResourcesInAllAssemblies() => AllAssembliesOfCurrentAppDomain.ToList().ForEach(ListResourcesInAssembly); - public static void ListResourcesInOurSatelliteAssembly() - => ListResourcesInAssembly(SatelliteAssembly); + public static void ListResourcesInReferencedAssembly() + => ListResourcesInAssembly(ReferencedAssembly); public static void FindResourceByNameAndDisplayIt(string resourceName) => DisplayResource(resourceName, FindResourceByName); @@ -61,7 +61,7 @@ private static Assembly ThisAssembly private static Assembly[] AllAssembliesOfCurrentAppDomain => AppDomain.CurrentDomain.GetAssemblies(); - private static Assembly SatelliteAssembly => + private static Assembly ReferencedAssembly => Assembly.Load("Embedded_Resources_in_NET_Library"); private static Stream? FindResourceByName(string resourceName) diff --git a/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs b/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs index a57f825b18..3333cf3b5a 100644 --- a/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs +++ b/csharp-intermediate-topics/Embedded_Resources_in_NET/Tests/SampleResourceReaderUnitTests.cs @@ -37,9 +37,9 @@ public void GivenMainAssembly_WhenRunningListResourcesInAllAssemblies_ThenExpect } [TestMethod] - public void GivenSatelliteAssembly_WhenRunningListResourcesInOurSatelliteAssembly_ThenExpect4LinesInConsole() + public void GivenReferencedAssembly_WhenRunningListResourcesInReferencedAssembly_ThenExpect4LinesInConsole() { - var (content, noLines) = GetConsoleOutput(SampleResourceReader.ListResourcesInOurSatelliteAssembly); + var (content, noLines) = GetConsoleOutput(SampleResourceReader.ListResourcesInReferencedAssembly); var expectedLines = 4; var expectedText = "Embedded_Resources_in_NET_Library.Resources.text-file.txt";