GetManifestResourceNames:某些资源未嵌入(未经授权?)

时间:2018-11-11 21:06:34

标签: .net embedded-resource

以这种类型的名称命名嵌入式资源时:

随便。{xxx}。随便

用以下示例之一替换{xxx}:agq,arn,asa,ast,bas,bem,bez,bin。 Assembly.GetManifestResourceNames找不到它们。大约有一百个。 (查看下面的代码以查找所有代码)

无论是.Net框架还是.Net核心,我都得到相同的结果。

这种命名是未经授权的,因为它看起来像某种禁止的扩展名吗?如果是这样,如何禁用此哑安全规则。

        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();

0 个答案:

没有答案
相关问题