Tengo problemas para obtener transmisiones de recursos incrustados. La mayoría de los ejemplos en línea muestran las rutas que se pueden traducir directamente al cambiar la barra de una ruta a un punto para la fuente (MyFolder/MyFile.ext se convierte en MyNamespace.MyFolder.MyFile.ext). Sin embargo, cuando una carpeta tiene un punto en el nombre y cuando se usan caracteres especiales, no se puede obtener manualmente el nombre del recurso. Estoy tratando de encontrar una función que puede convertir una ruta a un nombre de recurso como Visual Studio les cambia el nombre al compilar ..Recuperar recursos incrustados con caracteres especiales
Estos nombres de la solución ...
- contenido/jQuery.UI- 1.8.2/jQuery.UI.css
- scripts/jQuery-1.5.2/jquery.js
- Scripts/jQuery.jPlayer-2.0.0/jQuery.jPlayer.js
- Scripts/jQuery.UI- 1.8.2/jQuery.UI.js
... se cambian en estos nombres de los recursos ...
- Content.jQuery.UI_1._8._2.jQuery.UI.css
- Scripts.jQuery_1._5._2.jQuery. js
- Scripts.jQuery.jPlayer_2._0._0.jQuery.jPlayer.js
- Scripts.jQuery.UI_1._8._12.jQuery.UI.js
rayas verticales se convierten en puntos. Sin embargo, cuando se usa un punto en el nombre de una carpeta, el primer punto aparentemente se considera una extensión y el resto de los puntos se cambian para que se les agregue un guión bajo. Sin embargo, esta lógica no se aplica en el archivo jQuery.js, ¿quizás porque la 'extensión' es un número único? Aquí hay una función capaz de traducir los problemas que he tenido hasta ahora, pero no funciona en la ruta jQuery.js.
protected String _GetResourceName(String[] zSegments)
{
String zResource = String.Empty;
for (int i = 0; i < zSegments.Length; i++)
{
if (i != (zSegments.Length - 1))
{
int iPos = zSegments[i].IndexOf('.');
if (iPos != -1)
{
zSegments[i] = zSegments[i].Substring(0, iPos + 1)
+ zSegments[i].Substring(iPos + 1).Replace(".", "._");
}
}
zResource += zSegments[i].Replace('/', '.').Replace('-', '_');
}
return String.Concat(_zAssemblyName, zResource);
}
¿Existe alguna función que pueda cambiarme los nombres? ¿Qué es? ¿O dónde puedo encontrar todas las reglas para poder escribir mi propia función? Gracias por cualquier ayuda que pueda brindar.
Gracias por la rápida respuesta de Keith. No puedo encontrar la clase mencionada, aunque parece estar en "Microsoft.Dss.Services.AssemblyEmbeddedResourceService" (No lo tengo localmente). Eso generalmente también significa que mono no tiene una implementación para él, y eso es algo que no puedo ignorar. Quizás hay otras formas? –
Reitero: DEFINE una clase "Marker" vacía en cada directorio que contiene recursos. Acabo de crear el nombre "MarkerClass". Tenía un poco de Google, con la premisa de que HABÍA una manera mejor, y se me ocurrió esta pequeña joya: http://stackoverflow.com/questions/27757/how-can-i-discover-the- path-of-a-embedded-resource ... Espero que sea útil. – corlettk
No se puede definir una clase en un espacio de nombres con puntos (que es exactamente la información que necesito, ¿cómo se codifican los nombres de recursos incrustados?). Una vez que el nombre es correcto, simplemente puedo usar GetManifestResourceStream según su referencia vinculada. –