C# 使用FileInfo读取文件时FileNotFoundException
我目前正在使用fileinfo在xml验证器中使用xsd文件 我有3个项目,一个GUI,一个界面,一个项目。一个输入项目和一个测试项目 在输入项目中,我有一个类,该类根据同一对象中的文件路径创建FileInfo对象: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不在那里 我知
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在项目(或解决方案)属性的编译后生成部分,您可以放置指令,例如复制指令。