Może brakuje mi czegoś bardzo prostego tutaj, ale jaka jest korzyść z używania odbicia w celu pobrania osadzonego zasobu z tego samego zestawu , który zawiera zasób w przeciwieństwie do po prostu pobierając go za pomocą pliku .resx? Widzę to bardzo często, ale nie rozumiem - czy jest powód do używania Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)
w porównaniu do pliku Resx Resources.resource
? Nawet Microsoft to robi: How to embed and access resources.Plik zasobu (.resx) kontra odbicie w celu uzyskania dostępu do osadzonego zasobu
Co mam na myśli: załóżmy, że mam zespół MyAssembly
, który zawiera osadzony zasób Config.xml
. Zespół ma MyClass
który implementuje metodę, która zwraca wymieniony zasób jako wyrażenie:
public string GetConfigXML() // returns the content of Config.xml as a string
Często widzę to realizowane w ten sposób, przy użyciu odbicia do pobierania zasobów:
public string GetConfigXML()
{
Stream xmlStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssembly.Config.xml");
string xml = GetStringFromStream(xmlStream);
return xml;
}
Dlaczego korzystania GetManifestResourceStream()
gdy jest można:
- dodać plik zasobów (
Resource.resx
) do projektu w Visual StudioMyAssembly
; - dodać
Config.xml
do zasobu "Pliki"; - uzyskać zawartość
Config.xml
w znacznie prostszy sposób:string xml = Resource.Config;
nie wiem jak Visual Studio obsługuje .resx pliki wewnętrznie, ale wątpię, to po prostu kopiuje zasobu do pliku .resx (w w takim przypadku otrzymasz zduplikowane zasoby). Zakładam, że wewnętrznie nie korzysta też z odbicia, więc dlaczego nie po prostu użyć plików .resx w takich sytuacjach, co wydaje mi się bardziej przyjazne dla wydajności?
Przeniesienie go przez zespół * może * spowoduje załadowanie do ciebie satelitarnego zestawu kultury, podczas gdy ładowanie resxu pozostawia ci odpowiedzialność za wybranie właściwego dla aktualnej kultury. –