在ASP .NET Core中,我尝试将一些带有属性的XML-Element添加到现有的XML文件中 .
在ASP NET 4.5中,我会使用下面的代码来实现这个目的:
string path = Server.MapPath("~/Data/foo.xml");
XDocument xdoc = XDocument.Load(path);
//Do stuff with XElement and XAttributes...
xdoc.Save(path);
但是使用ASP .NET Core,我无法使用Server.MapPath(),所以我得到了IHostingEnvironment的完整路径:(阅读更多here)
在ASP .NET Core上运行下面的完整代码将导致在尝试运行“xdoc.Save(pathToDataFile);”时“无法从String转换为System.IO.Stream” ??
var contentRoot = hostingEnvironment.ContentRootPath;
string pathToDataFile = contentRoot + "\\Data\\foo.xml";
XDocument xdoc = XDocument.Load(pathToDataFile);
//Do stuff with XElement and XAttributes...
xdoc.Save(pathToDataFile);
为什么“xdoc.Save()”在ASP .NET Core中不起作用,但在.NET 4.5中运行良好?
2 回答
.NET Core中提供的API是完整.NET框架中可用的API的一部分 . 在某些领域,您会发现几乎所有.NET 4.5中都可以使用.NET Core,但情况并非总是如此 .
在您的情况下,如果您在Visual Studio中查看
Save
方法的重载是否可用,您将找到以下内容:您有编译错误的原因现在非常清楚 . 在.NET Core中,没有重载接受
string
,它定义了应保存文档的文件路径 .您必须先创建一个支持写入的
Stream
指向所需的路径,然后将Stream
传递给Save
方法 . 您可以查看full .NET framework implementation以供参考 .我有同样的问题,FileStream适合我 .
请记住使用以下代码行来防止文件被截断 .