2014-02-26 65 views
1

我在项目中添加了一个XML文件,我将其用作数据库。 我已经将它设置为嵌入式资源。 一切工作正常,直到我在我的开发环境。嵌入式资源XML文件不在安装文件夹中复制

但是,当我发布它并将其安装到我的机器中时,XML文件不会自动复制到安装路径,因此它开始给出错误,表明它找不到该文件。

在Windows应用程序中使用XML文件存储和检索数据的正确方法是什么以及我在做什么错误?

在此先感谢!

+0

什么是错误?并发布“无法找到文件”的代码。 –

+0

它只是给出错误,它无法找到路径中的文件,并给出安装路径。这是我用来阅读文件的简单代码'XDocument doc = XDocument.Load(“MasterData.xml”);' –

+0

@DourHighArch - 这是确切的错误 'System.IO.FileNotFoundException:找不到文件'C:\用户\用户\应用程序数据\本地\应用\ 2.0 \ PV8CYYPD.1XE \ GZQP92CW.WWV \ code..tion_0000000000000000_0001.0000_a42745f5ded40bd9 \ MasterData.xml'。 System.IO中的文件名:'C:\ Users \ User \ AppData \ Local \ Apps \ 2.0 \ PV8CYYPD.1XE \ GZQP92CW.WWV \ code..tion_0000000000000000_0001.0000_a42745f5ded40bd9 \ MasterData.xml' .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)' –

回答

1

找到解决方案!

我所做的是,使我的xml文件资源类型Content并将Copy to Output Directory设置为Copy Always,使其可根据@tencntraze评论进行编辑。 但是,当我发布并安装它时,它在尝试读取FileNotFoundException时仍然抛出相同的异常。

然后我发现的主要伎俩,我去

属性>发布(标签)>应用程序文件(按钮)>改变Publish Status为我的文件从Data FileInclude

和它的工作!

谢谢!

0

嵌入式资源的重点在于它不会复制到输出目录,而是嵌入到可执行文件中。最快的解决办法是改变你的逻辑从组件读取(注意,这个假设它嵌入在同一程序的可执行文件):

using (Stream stream = this.GetType().Assembly.GetManifestResourceStream(filename)) // Needs to account for folder paths, etc 
{ 
    using (StreamReader sr = new StreamReader(stream)) 
    { 
     string xml = sr.ReadToEnd(); 

     // Do stuff 
    } 
} 

编辑:This SO question涵盖的话题很好,基本上具有相同的代码(伟大的思想......),但更好的解释如何使用它,以及你需要注意什么。

+0

谢谢!我可以像这样获取文件并可以读取它,但我无法对文件内容进行任何更改。它允许我更改内容并保存它,但是当我获取它时,我的更改丢失了 –

+0

由于嵌入式资源已编译到您的程序集中,因此无法编辑它们。如果你想改变它,我会使用不同的资源类型(即'内容'),并将“复制到输出目录”设置为“始终复制”或“如果更新复制” – Matt

+0

当我这样做时,它开始给予相同的例外,'FileNoFoundException' :( –

相关问题