C # 2008 SP1
Ich verwende den folgenden Code:
dt.ReadXml("%AppData%\\DateLinks.xml");
Es wird jedoch eine Ausnahme angezeigt, die auf den Speicherort verweist, von dem aus meine Anwendung ausgeführt wird:
Ein Teil des Pfads 'D: \ Projects \ SubVersionProjects \ CatDialer \ bin \ Debug \% AppData% \ DateLinks.xml' konnte nicht gefunden werden.
Ich dachte der %AppData%
sollte den relativen Weg finden. Wenn ich gehe Start|Run|%AppData%
, bringt mich der Windows Explorer in dieses Verzeichnis.
Ich kann nicht den vollständigen Pfad eingeben, da der Benutzer auf jedem Client-Computer unterschiedlich ist.
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
für mich eine leere Zeichenfolge zurückgegeben (IIS 7, VS 2011). Problem gelöst mit Simon_Weaver Lösung - Mapping mitMapPath
.Der Pfad ist anders, wenn Sie über ASP.NET sprechen.
Ich konnte keinen der 'SpecialFolder'-Werte finden, die auf / App_Data für ASP.NET verweisen.
Stattdessen müssen Sie Folgendes tun:
(Hinweis: In einem MVC-Controller benötigen Sie die Eigenschaft 'Current' nicht.)
Wenn es einen anderen "abstrakteren" Weg gibt,
App_Data
würde ich gerne hören, wie.quelle
HostingEnvironment.MapPath(@"~/App_Data")
ist besser und funktioniert sowohl in MVC / WebAPI- als auch in WCF-Kontexten, in denen es keinen HttpContext gibt - aber nicht sicher über den Kern 'Die beste Möglichkeit, das AppData-Verzeichnis zu verwenden, ist IS verwendet
Environment.ExpandEnvironmentVariable
Methode.Gründe dafür:
Beispiele:
Denken Sie daran, dass einige Benutzer Folgendes eingeben
%AppData%
, andere%appdata%
und andere, mit denen%APpData%
Sie nicht enden möchten:Wenn die Umgebungsvariable nicht festgelegt ist, ist dies nicht Ihre Schuld (außer wenn dies der Fall ist ). Normalerweise sage ich den Leuten nicht , dass sie das Rad nicht neu erfinden sollen, aber nachdem ich das erste Mal in die andere Richtung gegangen bin und festgestellt habe, dass es eine schlechte Idee ist.
quelle
path
Variablen :)Environment.ExpandEnvironmentVariable
ist am besten, wenn Sie einfach erweitern müssen, unabhängig davon, welche env-Variablen sich in der Pfadzeichenfolge befinden.Sie können auch verwenden
um die
%AppData%
Variable zu erweitern .quelle
In .net2.0 können Sie die Variable verwenden
Application.UserAppDataPath
quelle
Ich denke nicht, dass es funktionieren wird,% AppData% in eine solche Zeichenfolge einzufügen.
Versuchen
quelle
Ich wollte nur eine andere Möglichkeit für den Zugriff auf den Ordner 'App_Data' in meiner MVC-Anwendung freigeben, falls jemand dies benötigt.
quelle
Dies funktioniert für mich in einer Konsolenanwendung -
quelle
Für ASP.NET muss die
Load User Profile
Einstellung im App-Pool festgelegt werden, dies reicht jedoch nicht aus. Es gibt eine versteckte Einstellung mit dem NamensetProfileEnvironment
in\Windows\System32\inetsrv\Config\applicationHost.config
, die aus irgendeinem Grund standardmäßig deaktiviert ist und nicht wie in der Dokumentation beschrieben aktiviert ist . Sie können die Standardeinstellung entweder ändern oder in Ihrem App-Pool festlegen. Alle Methoden in derEnvironment
Klasse geben dann die richtigen Werte zurück.quelle