gpt4 book ai didi

c# - 'MapPath' 方法在其过程移至 C# 类文件后立即停止工作

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:28 25 4
gpt4 key购买 nike

我正在使用 C# ASP.NET VS2010。

我有一个 .aspx.cs 程序可以读取 XML 文件并且工作正常。

它是这样的:

string fileName = "~/App_Data/" + filename + ".xml";
DataSet ds = new DataSet();
ds.ReadXml(MapPath(fileName));

我经常使用这个过程来读取各种文件(文件名),因此,我试图将这个过程放在 Class1.cs 文件中(在 App_Code 文件夹中),但我收到此错误消息:

The type or namespace name 'MapPath' does not exist in the namespace 'Microsoft.SqlServer.Server' (are you missing an assembly reference?)

我使用此 MapPath 以这种方式将 XML 文件读入数据集:

ds.ReadXml(Server.MapPath(fileName));

文件名是前面几行声明的字符串变量:

string fileName = "~/App_Data/" + inputString + ".xml";

将此行放入class.cs文件后,VS2010要求在本地(同时行而不是通过添加命名空间),因此新形式的行看起来像这样:

ds.ReadXml(Microsoft.SqlServer.Server.MapPath(fileName));

郑重声明,我确保源 .aspx.cs 文件中的所有命名空间都在类文件中。

为什么 Class1.cs 和 .aspx.cs 有区别?

我该如何解决这个问题?

为了从这个新类文件中读取 XML 文件,我应该更改什么?

将 XML 文件读入数据集的行是否有替代品?

最佳答案

MapPathSystem.Web.HttpServerUtility 类的方法,您需要该类的一个实例来调用该方法。在 ASP 页面中,一个实例在页面的服务器成员中可用;在其他地方,你必须提供它。要么作为

HttpContext.Current.Server.MapPath(fileName);

如果您在其中,它使用当前 HttpContextServer 变量。 HttpContext 类包含许多与 HTTP 相关的对象,您可以通过 Page 成员访问这些对象 - 例如 Request、Response、Server。 Current 静态属性提供您当前正在处理的请求的上下文。在 ASP Web 项目的 App_Code 文件夹中的类内部,您可以安全地假设存在事件上下文。

如果你想将你的类移动到一个单独的程序集,最好让服务器(或上下文)成为你方法的一个参数,并让调用者负责提供一个:

public class Class1
{
public void MyMethod(HttpServerUtility server)
{
//...
server.MapPath(fileName);
//...
}
}

在 ASP 页面中,它会被调用为 class1instance.MyMethod(this.Server);

Microsoft.SqlServer.Server 与它无关,只有类/成员名称相同,而 Visual Studio 弄错了。

关于c# - 'MapPath' 方法在其过程移至 C# 类文件后立即停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com