c# - 发布 WPF 桌面应用程序后无法读取我的项目中的文件
问题描述
我有一个 WPF 桌面应用程序。当我处于调试模式时,我可以访问 file.sql 并读取内容。当我使用 Visual Studio 发布文件并尝试运行 click once 应用程序时,我无法读取 file.sql 文件和应用程序找不到路径。我调用以读取 file.sql 的 .cs 文件位于同一文件夹中。
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,@"..\..\ControlFolder","file.sql");
string readQuery = File.ReadAllText(path);
如何确保在发布我的应用程序后能够读取 file.sql?
解决方案
发布时,您需要确保将“file.sql”也发布到二进制输出路径。最佳实践是避免使用源代码的相对路径,相反,您应该始终确保指向您(开发人员)将确保在已发布区域中存在的文件。
这是我要做的:
在 Visual Studio 中,转到“file.sql”的属性并确保将其设置为“Content”和“Copy if newer”。这将确保您的“file.sql”将始终存在于二进制输出路径中。如果在 Visual Studio 中,您已将“file.sql”放置在名为“ControlFolder”的文件夹中,那么这意味着您的二进制输出内容将包含一个“.\ControlFolder\file.sql”文件。
修复您的代码,使其永远不会指向源代码的相对路径。相反,依赖二进制输出路径。因此,不要使用您共享的代码,而是将其替换为:
string path = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"ControlFolder\file.sql");
string readQuery = File.ReadAllText(path);
推荐阅读
- php - 如何在 dockerfile 上编写正确的指令以增加 PHP 资源?
- apache-spark - 纱线上的 Spark 应用程序卡在 toLocalIterator.toList
- reactjs - reactstrap modal 中的 Graphql 突变 - 无法对未安装的组件执行 React 状态更新
- google-maps - 从 ArcGIS KML 将数据导入 Google 地图:无法识别字段
- c++ - C++ 中用于并行化的字符串数组
- visual-studio - 为什么 VS 2019 让哈希注释在 YAML 文件中使用大字体?
- sql - 如何创建其中一个字段不是主键的关联表?
- java - 如何根据版本过滤出 Java 方法?
- xcode - 每次我将文本字段拖到屏幕上时,它都会调整大小以适应整个屏幕。有什么办法可以调整它的大小使其成为一个小文本框?
- javascript - 当另一个数字上升时,如何降低一个数字?