Frage

Ist es möglich, Ressourcen-Dateien (RESX) innerhalb Unterordner innerhalb App_GlobalResources zu setzen?

Zum Beispiel:

  

/App_GlobalResources/someresources/myfile.resx

     

/App_GlobalResources/someresources/myfile.fr-fr.resx

     

/App_GlobalResources/othereresources/otherfile.resx

     

/App_GlobalResources/othereresources/otherfile.fr-fr.resx

Oder sind alle RESX-Dateien direkt in App_GlobalResources platziert?

Wenn es möglich ist, Unterordner zu verwenden, wie wollen Sie programmatisch Zugriff auf Ressourcen innerhalb Unterordner?

War es hilfreich?

Lösung

Technisch ja ist es möglich, aber es gibt einige Fallen. Zunächst lassen Sie mich Ihnen ein Beispiel zeigen. Angenommen, mein App_GlobalResources Ordner sieht so aus:

/App_GlobalResources
    /Test
        TestSubresource.resx
    TestResource.resx

Jede Ressource-Datei hat einen einzigen Eintrag namens „Teststring“. Ich habe jede Ressource-Datei mit dem Visual Studio-Menü, so dass es eine Klasse für mich geschaffen. Standardmäßig werden alle in die App_GlobalResources Ordner hinzugefügt Klassen den gleichen Namensraum von Resource haben. Also, wenn ich die Klasse Generator verwenden möchten, und ich will Test im Namensraum, muss ich in die TestSubresource.Designer.cs Datei gehen und manuell den Namespace ändern. Sobald ich das tun, kann ich folgendes tun:

var rootResource = Resources.TestResource.TestString;
var subResource = Resources.Test.TestSubResource.TestString;

Ich kann sie auch Referenz GetGlobalResourceObject mit:

var rootResource = GetGlobalResourceObject( "TestResource", "TestString" );
var subResource1 = GetGlobalResourceObject( "TestSubresource", "TestString" );

Beachten Sie, dass ich immer noch die „TestSubresource“ als Mittel verwenden, um die Ressourcen in dieser Datei zu verweisen, auch wenn es sich in einem Unterordner ist. Nun, einer der Fänge, ist, dass alle Dateien in allen Ordnern in App_GlobalResources eindeutig sein müssen oder Ihr Projekt wird einen Laufzeitfehler werfen. Wenn ich eine Ressource mit dem Namen „TestResource.resx“ zu / Test hinzufügen, wird es die folgenden Laufzeitfehler werfen:

  

Die Ressourcendatei ‚/App_GlobalResources/TestResource.resx‘ kann nicht sein,   verwendet, da es mit einer anderen Datei mit dem gleichen Namen in Konflikt steht.).

Dies gilt auch, wenn ich den Namespace auf die neue Ressource ändern.

So, zum Schluss, ja, es ist möglich, aber Sie erhöhen die Chancen auf einen Laufzeitfehler bekommen, weil aus zwei identisch benannten Ressourcendateien in verschiedenen Teilen der App_GlobalResources Ordnerstruktur, die durch das Dateisystem erlaubt, aber nicht von .NET .

Andere Tipps

Es ist möglich. Zumindest habe ich es geschafft, es zu tun.

Innerhalb einer Website habe ich die App_GlobalResources Ordner. Im Inneren habe ich einen anderen Ordner „MyFolder“ und platziert MyResource.resx Datei im Inneren. Resx Datei enthalten sind ein Paar MyKey1 -. MyValue1

Mit der GetResource Methode der folgenden Klasse I erfolgreich "MyValue1" für Namen extrahierte = "MyKey1"

static class Class1 {

    static Assembly FindGlobalResAssembly() {
        foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
            if(asm.FullName.StartsWith("App_GlobalResources."))
                return asm;
        }
        return null;
    }

    public static object GetResource(string name) {
        Assembly asm = FindGlobalResAssembly();
        if(asm == null)
            return null;
        return new ResourceManager("Resources.MyResource", asm).GetObject(name);
    }

}

Dieser Ansatz funktioniert in Mitteln Vertrauen auch.

Es scheint, dass Ordner keinen Unterschied machen, wenn Ressourcen aus Code zugreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top