在ASP核心,我试图添加一些.NET元素与属性到现有的.NET文件。
在ASPNET4.5中,我会使用下面的代码来实现这一点:
string path = Server.MapPath("~/Data/foo.xml");
XDocument xdoc = XDocument.Load(path);
//Do stuff with XElement and XAttributes...
xdoc.Save(path);但是使用ASP.NET核心,我不能使用Server.MapPath(),所以我使用IHostingEnvironment来获得完整的路径:(阅读更多here )
在.NET核心上运行下面的完整代码将导致在尝试运行“System.IO.Stream(xdoc.Save);”时出现"Cannot convert from String to pathToDataFile“。
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核心中不起作用,但在.NET 4.5中却能正常工作?
发布于 2017-01-27 05:41:32
.NET核心中可用的API是完整.NET框架中可用API的子集。在某些领域,您会发现.NET核心中几乎包含了.NET 4.5中的几乎所有内容,但情况并不总是如此。
在您的例子中,如果您使用Visual Studio查看哪些Save方法的重载可用,您将发现以下这些重载:
public void Save(Stream stream);
public void Save(TextWriter textWriter);
public void Save(XmlWriter writer);
public void Save(Stream stream, SaveOptions options);
public void Save(TextWriter textWriter, SaveOptions options);出现编译错误的原因现在已经很清楚了。在.NET核心中,不会重载接受定义文档应保存到的文件路径的string。
您必须首先创建一个指向所需路径的可写Stream,并将该Stream传递给Save方法。您可以查看full .NET framework implementation以供参考。
发布于 2017-02-21 02:11:00
我也有同样的问题,FileStream为我工作。
FileStream fileStream = new FileStream("file.xml", FileMode.Create);
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true};
XmlWriter writer = XmlWriter.Create(fileStream, settings);请记住使用以下代码行来防止文件被截断。
writer.Flush();
fileStream.Flush();https://stackoverflow.com/questions/41882854
复制相似问题