【问题标题】:How to load external data files without defining path explicitly?如何在不明确定义路径的情况下加载外部数据文件?
【发布时间】:2011-03-27 18:23:03
【问题描述】:

我有一个加载外部文件的 C# 程序集。该程序集由 asp.net 网站使用。 以下是加载数据文件的代码

string dataDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"data");
filePath = Path.Combine(dataDirectory,_fileName);

该组件在 Windows 应用程序中运行良好,但是当我尝试在 asp.net 网站中使用它时,由于该站点找不到数据文件而失败,并出现以下错误:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\cmictranslatorsite\20a8eddd\864b2575\assembly\dl3\5bd4a35e\8c6f79b6_98eccb01\data\file.txt

【问题讨论】:

    标签: c# asp.net relative-path


    【解决方案1】:

    您需要使用Server.MapPath 来解析 ASP.NET 应用程序中的相对物理路径。

    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 正在返回 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\cmictranslatorsite\20a8eddd\864b2575\assembly\dl3\5bd4a35e\8c6f79b6_98eccb01\,这是复制和执行应用程序文件的正确位置。

    如果你想要一个相对于 IIS 中的虚拟目录的目录,你可以使用 Server.MapPath 来获取路径。如果您的data 路径不是相对的,则.config 文件可能是存储此路径的地方。无论哪种情况,请检查app pool identity 或您的authenticated 用户是否有权访问您正在读取或写入的路径。

    【讨论】:

    • 我可以使用 dll 中的 Server.MapPath 吗?它是不同应用程序(Windows 或 Web 应用程序)使用的通用组件
    • 是的,您需要为此计算路径的代码创建一个optional parameter,然后在 Windows 应用程序中,您不要在 Web 应用程序中传递此参数(或传递 null)。或者你可以有orverloads,或者whaterver在你的代码中是有意义的,以容纳一个更多的变量来依赖你的dll代码。
    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多