Frage

Ihr Standalone eher klein C # Projekt erfordert eine moderate Zahl (ca. 100) von (XML-Dateien), die domänenspezifischen Werte zur Laufzeit zur Verfügung zu stellen sind erforderlich. Sie sind nicht sichtbar zu sein für die Benutzer erforderlich. Doch ich werde sie hinzufügen müssen oder sie bei Bedarf aktualisieren, die ich bin bereit, manuell zu tun (das heißt ich nicht ein bestimmtes Werkzeug ins Auge fassen, vor allem, da sie außerhalb des Systems erstellt werden kann).

Ich würde sie wollen relocatable sein (das heißt relativ Dateinamen zu verwenden). Welche Optionen sollte ich sie für die Organisation und was die Anrufe erforderlich wäre, um zu öffnen und sie lesen?

Das Projekt im Wesentlichen eigenständigen (nicht auf dem Web-Dienste, Datenbanken im Zusammenhang oder anderen Anwendungen von Drittanbietern). Es wird in eine kleine Anzahl von Namensräumen organisiert und die gesamte Logik für die Dateien können auf einem einzigen Namensraum beschränkt werden.

========= Es tut mir leid für unklar ist. Ich werde es nochmal versuchen. In einer Java-Anwendung ist es möglich, Ressourcen-Dateien enthalten, die zu dem Classpath relativ gelesen werden, nicht auf den letzten * .exe. Ich glaube, es ist ein Weg, um eine ähnliche Sache in C # zu tun.

========= Ich glaube, ich sollte RESX im Zusammenhang mit somthing werden. Siehe (RESX-Dateien und XML-Daten https://stackoverflow.com/posts/1205872/edit ). Ich kann Strings in einem resx Datei setzen, aber das ist mühsam und fehleranfällig, und ich würde es vorziehen, sie in die entsprechende Position zu kopieren.

Es tut mir leid unklar zu sein, aber ich bin mir nicht ganz sicher, wie die Frage zu stellen.

========= Die Frage scheint sehr nahe zu sein ( C # -Äquivalent von getClassLoader (). GetResourceAsStream (...) ). Ich möchte in der Lage sein, die Dateien in Visual Studio hinzufügen - meine Frage ist, wo ich sie setzen und wie kann ich zeigen, sie sind Ressourcen

War es hilfreich?

Lösung 3

Es gibt eine ausführliche Antwort auf http://www.attilan.com/2006 /08/accessing_embedded_resources_u.php . Es scheint, dass die Datei als EmbeddedResource angegeben werden muss. Ich habe noch nicht das bekam zu arbeiten, aber es ist das, was ich will.

Andere Tipps

Wenn Sie sie in einem Unterordner in Bezug auf die ausführbare Datei setzen, sagen .\Config Sie wäre in der Lage, sie mit File.ReadAllText(@"Config\filename.xml") zugreifen zu können.

Wenn Sie eine ASP.NET-Anwendung haben Sie sie in den speziellen App_Data Ordnern ablegen konnten und greifen Sie mit File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))

Ich bin immer noch nicht klar, ob Sie eine Win Formen haben, oder Web-Projekt ... Unabhängig davon, ist die Verwendung von relativen Dateinamen nicht erforderlich, um sie relocatable zu haben. Ich würde appSettings Abschnitt der einen Eintrag in Ihrem web.config oder app.config-Datei den vollständigen Pfad zu Ihren XML-Dateien enthalten vorschlagen hinzufügen. Wenn sie bewegt werden, alles, was Sie tun müssen, ist Ihre Konfigurationsdatei ändern.

<!-- app/web.config --->
<appSettings>
        <add key="filelocation" value="c:\xmlfiles"/>
</appSettings>

//c# code (in ASP.NET app, for example)
using System.IO;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string path = ConfigurationManager.AppSettings["filelocation"];
        DirectoryInfo di = new DirectoryInfo(path);
        List<XDocument> xmlDocs = new List<XDocument>();
        foreach (FileInfo fi in di.GetFiles())
        {
            xmlDocs.Add(XDocument.Load(fi.FullName));
        }
    }
}

Natürlich können Sie oder können nicht die XML-Dateinamen kennen, so dass Sie nicht laden kann und sie in genau der gleichen Weise lesen.

In Ihrem Fall scheint es völlig angemessen, sie in Ihrem Ordner App_Data zu setzen, wenn Sie eine ASP.NET-Website haben (vorausgesetzt, es wird nie mehr als ein Server auf sein). Nur vorsichtig sein, wenn Sie „~ / App_Data“ in der Config-Datei auflisten Sie wissen, dass in einen vollständigen Pfad zu übersetzen wie mit Server.MapPath Darin taten ().

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