GetManifestResourceNames: некоторые ресурсы не встроены (не авторизованы?) - PullRequest
0 голосов
/ 12 ноября 2018

Когда внедренный ресурс назван с таким шаблоном:

любой. {Ххх} .whatever

Замените {xxx} одним из следующих примеров: agq, arn, asa, ast, bas, bem, bez, bin. Assembly.GetManifestResourceNames не найдет их. Их около ста. (Проверьте код ниже, чтобы найти их все)

Я продолжаю получать одни и те же результаты, будь то с .Net framework или .Net core.

Является ли этот тип именования неавторизованным, потому что это похоже на какое-то запрещенное расширение имени файла? Если да, то как отключить это тупое правило безопасности.

        List<string> codes = new List<string>();

        for (char first = 'a'; first <= (int)'z'; first++)
            for (char second = 'a'; second <= (int)'z'; second++)
                for (char third = 'a'; third <= (int)'z'; third++)
                    codes.Add(first.ToString() + second + third);

        codes = codes.Take(1000).ToList();



        string slnPath = Directory.GetParent(System.Reflection.Assembly.GetExecutingAssembly().Location).FullName;
        while (!Directory.GetFiles(slnPath).Any(x => x.EndsWith(".sln")))
            slnPath = Directory.GetParent(slnPath).FullName;

        string classLibraryFolder = "ClassLibrary1";
        var csjFolder = Path.Combine(slnPath, classLibraryFolder);
        var csjPath = Path.Combine(csjFolder, $"{classLibraryFolder}.csproj");            
        string resourcesFolder = "Resources";
        string resourcesPath = Path.Combine(csjFolder, resourcesFolder);

        XDocument doc = XDocument.Load(csjPath);
        if(!doc.Descendants().Attributes().Any(x=> x.Value == $"{resourcesFolder}\\x.aaa.x"))
        {
            Console.WriteLine("Creating embedded resources...");                

            Directory.CreateDirectory(resourcesPath);

            foreach (var code in codes)
                File.Create(Path.Combine(resourcesPath, "x." + code + ".x")).Close();

            Console.WriteLine("Updating csproj...");

            var xNone = new XElement("ItemGroup");
            foreach (var code in codes)
                xNone.Add(new XElement("None", new XAttribute("Remove", $"{resourcesFolder}\\x.{code}.x")));

            var xEmbeddedResource = new XElement("ItemGroup");
            foreach (var code in codes)
                xEmbeddedResource.Add(new XElement("EmbeddedResource", new XAttribute("Include", $"{resourcesFolder}\\x.{code}.x")));

            doc.Root.Add(xNone);
            doc.Root.Add(xEmbeddedResource);
            doc.Save(csjPath);

            Console.WriteLine("Please relaunch program.");
            return;
        }


        string[] Languages2 = typeof(ClassLibrary1.Class1).GetTypeInfo().Assembly.GetManifestResourceNames().ToArray();

        var present = codes.Where(code => Languages2.Any(x => x.EndsWith($"x.{code}.x"))).ToList();
        var missing = codes.Except(present).ToList();
...