Agradecemos tu apoyo para extender nuestras crónicas referente a las ciencias de la computación.
Solución:
Abra el archivo resx y en su barra de herramientas hay un Access Modifier
menú. Establezca esto en Public
. Esto generará un *.Designer.cs
Archivo.
Si el archivo se agrega a un proyecto de Visual Studio, debe configurar el Custom Tool
propiedad de la .resx
archivo a ResXFileCodeGenerator
. Luego, VS creará automáticamente el archivo de diseñador necesario.
En un proyecto, hice un script T4 que escanea la carpeta dentro del proyecto en busca de todas las imágenes y permite crear un archivo de recursos correspondiente con un clic.
Aquí está la parte necesaria del script T4:
var rootPath = Path.GetDirectoryName(this.Host.TemplateFile);
var imagesPath = Path.Combine(rootPath, "Images");
var resourcesPath = Path.Combine(rootPath, "Resources");
var pictures = Directory.GetFiles(imagesPath, "*.png", SearchOption.AllDirectories);
EnvDTE.DTE dte = (EnvDTE.DTE)((IServiceProvider)this.Host)
.GetService(typeof(EnvDTE.DTE));
EnvDTE.Projects projects = dte.Solution.Projects;
EnvDTE.Project iconProject = projects.Cast().Where(p => p.Name == "Icons").Single();
EnvDTE.ProjectItem resourcesFolder = iconProject.ProjectItems.Cast().Where(item => item.Name == "Resources").Single();
// Delete all existing resource files to avoid any conflicts.
foreach (var item in resourcesFolder.ProjectItems.Cast())
item.Delete();
// Create the needed .resx file fore each picture.
foreach (var picture in pictures)
var resourceFilename = Path.GetFileNameWithoutExtension(picture) + ".resx";
var resourceFilePath = Path.Combine(resourcesPath, resourceFilename);
using (var writer = new ResXResourceWriter(resourceFilePath))
foreach (var picture in picturesByBitmapCollection)
writer.AddResource(picture.PictureName, new ResXFileRef(picture, typeof(Bitmap).AssemblyQualifiedName));
// Add the .resx file to the project and set the CustomTool property.
foreach (var resourceFile in Directory.GetFiles(resourcesPath, "*.resx"))
var createdItem = resourcesFolder.Collection.AddFromFile(resourceFile);
var allProperties = createdItem.Properties.Cast().ToList();
createdItem.Properties.Item("CustomTool").Value = "ResXFileCodeGenerator";
He aplanado un poco el código anterior, porque en mi solución real uso una clase personalizada para cada imagen en lugar del nombre de archivo simple para admitir también el mismo nombre de archivo en diferentes subcarpetas (al usar una parte de la estructura de carpetas para el espacio de nombres Generacion). Pero para un primer disparo, lo anterior debería ayudarlo.
Haga clic derecho en el Resources.resx
y seleccione “Ejecutar herramienta personalizada”.