Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用FileInfo读取文件时FileNotFoundException_C#_Xml_Wpf_File_Fileinfo - Fatal编程技术网

C# 使用FileInfo读取文件时FileNotFoundException

C# 使用FileInfo读取文件时FileNotFoundException,c#,xml,wpf,file,fileinfo,C#,Xml,Wpf,File,Fileinfo,我目前正在使用fileinfo在xml验证器中使用xsd文件 我有3个项目,一个GUI,一个界面,一个项目。一个输入项目和一个测试项目 在输入项目中,我有一个类,该类根据同一对象中的文件路径创建FileInfo对象: new FileInfo(@"Xsd\Version_813\kvppt-8130.xsd") 这给我在运行测试和GUI时带来了麻烦。例如,当我启动GUI时,有时代码可以正常工作,没有问题,但有时FileInfo会从GUI项目中搜索Bin/debug文件夹,而XSD不在那里 我知

我目前正在使用fileinfo在xml验证器中使用xsd文件

我有3个项目,一个GUI,一个界面,一个项目。一个输入项目和一个测试项目

在输入项目中,我有一个类,该类根据同一对象中的文件路径创建FileInfo对象:

new FileInfo(@"Xsd\Version_813\kvppt-8130.xsd")
这给我在运行测试和GUI时带来了麻烦。例如,当我启动GUI时,有时代码可以正常工作,没有问题,但有时FileInfo会从GUI项目中搜索Bin/debug文件夹,而XSD不在那里

我知道这是有意的,但是有没有一种方法可以让unittest项目和GUI项目实现这一点

我尝试了以下方法:

var executingFileInfo = new FileInfo(Assembly.GetExecutingAssembly().Location);
var path = executingFileInfo.DirectoryName + Path.DirectorySeparatorChar + @"Xsd\Version_813\kvppt-8130.xsd";
Return new FileInfo(path);
但这不是解决方案,因为它仍然会选择启动项目

---编辑:

在尝试了评论中的一些建议后,我发现我的问题有点不同。我发现,如果在运行应用程序之前按“全部重建”,文件总是复制到正确的文件夹中。只有在我运行应用程序时才会失败

文件的属性位于“始终复制”上

…有时代码可以正常工作,但有时没有问题 FileInfo将从GUI项目和 XSD不在那里


确保在文件的属性上(从Visual Studio中)将“复制到输出目录”设置为“始终复制”或“更新时复制”

该代码甚至不会编译。您应该看到“错误CS1009:无法识别的转义序列”的错误。是的,我犯了复制粘贴错误。我纠正了它。字符串在我的代码中是一个变量,但我对其进行了更改以使其更清晰。请使用
executingFileInfo.Exists
executingFileInfo.FullName
,将其设置为文件的绝对路径,而不是相对路径。选项二,将路径移动到配置文件,以便您可以根据运行的内容使用不同的相对路径。选项三,除非您确实需要将其作为单独的文件,否则请使用嵌入式资源。我的属性始终位于副本上。但我有一种感觉,文件并不总是复制到文件夹中。@JorisMathijssen在项目(或解决方案)属性的编译后生成部分,您可以放置指令,例如复制指令。