代码之家  ›  专栏  ›  技术社区  ›  Akli

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

  •  1
  • Akli  · 技术社区  · 6 年前

    当嵌入式资源以这种模式命名时:

    这种命名是不是因为它看起来像某种禁止使用的扩展文件名?如果是,如何禁用这个愚蠢的安全规则。

            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 回复  |  直到 6 年前