【问题标题】:ASP.NET MVC - How are windows environment variables handled?ASP.NET MVC - 如何处理 Windows 环境变量?
【发布时间】:2010-02-23 13:30:01
【问题描述】:

这个问题也和我的另一个问题ASP.NET MVC - Website Paths有关。

我有一个第 3 方组件,它已将硬编码的目录路径编译到程序集中。路径之一的示例是:

%APPDATA%\Vendor\Product\settings.ini

因此,如果我创建一个控制台应用程序/windows 服务并在我的计算机上的帐户下运行它(在 windows server 2003 下)并保存这些设置,它们就会保存到这个目录中:

C:\Documents and Settings\James\Application Data\Vendor\Product\settings.ini

但是,如果我尝试通过我的网络应用程序做同样的事情,它不会。

我试图找出在 ASP.NET MVC Web 应用程序中使用时 %APPDATA% 环境变量映射到的位置。我已尝试按照另一个问题中的建议将Vendor\Product\ 目录放在我的App_Data 目录中......这不起作用。

我认为也许保存会失败,但是,没有抛出异常,该行的处理方式像往常一样。

【问题讨论】:

    标签: asp.net-mvc environment-variables


    【解决方案1】:

    我假设它将使用运行 ASP.Net 的服务或 AppPool 的环境变量设置。

    您是否尝试在使用组件之前在应用程序启动中设置环境变量?

    【讨论】:

    • @Colin,实际上没有什么好处。我会试试这个并回复你。好吧,AppPool 正在我的帐户下运行,并且没有写出(因为这是我认为会发生的)。
    【解决方案2】:

    FiguringOutAEnvironmentVariableContent

    嗨,詹姆斯,

    Noldorin 不久前发布了一个不错的SOLUTION

    引用作者...

    要获取AppData目录,最好使用GetFolderPath方法:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    

    %AppData% 是一个环境变量,它们不会在 .NET 中的任何位置自动展开,尽管您可以显式使用 Environment.ExpandEnvironmentVariable 方法来做到这一点。但是,我仍然强烈建议您使用 GetFolderPath,因为正如 Johannes Rössel 在评论中指出的那样,在某些情况下可能不会设置 %AppData%。

    最后,创建路径,如您的示例所示:

    var fileName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.ApplicationData), "DateLinks.xml")
    

    希望对你有帮助。

    奖励: <%= System.Environment.GetEnvironmentVariable("MyVariable") %>

    【讨论】:

    • @SDReyes,因为用于保存/读取设置文件的代码是在 DLL 中编译的,所以我不知道它使用什么方法来解析文件路径。我会假设它会使用类似的东西。然而,这不是问题。如果您在 ASP.NET 网站中执行上述操作,这就是路径解析的位置。
    • 嗨詹姆斯!测试一下... 希望对您有所帮助:)
    • 嗯,所以 %APPDATA% 没有设置...:/您是否尝试为您的应用程序池使用不同的帐户?作为 LocalService,LocalSystem...(注意安全!)-顺便说一句,您是否正在通过 IIS、Cassini 测试您的应用程序...??
    • @SDReyes - System.Environment 在 VS2012 中似乎不再存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多