【问题标题】:Can't find XML files in published C# project在已发布的 C# 项目中找不到 XML 文件
【发布时间】:2021-02-10 20:59:53
【问题描述】:

所以我使用 Visual Studio 在 C# 中创建了一个 Windows 窗体应用程序。该应用程序将数据保存到C:\Users\Me\source\repos\MyApp\MyApp\bin\Debug(默认位置)中的 .xml 文件,并且在 VS 中构建时可以完美运行。

我的程序使用简单的 LINQ 表达式从 .xml 文件中读取:

XDocument.Load("myfile.xml");
// do something with it

但是,当我尝试发布应用程序并作为独立的应用程序清单文件运行时,当我尝试读取其中一个 .xml 文件时收到以下错误:

Unhandled Exception: System.IO.FileNotFoundException: Could not find file 'C:\Users\Me\AppData\Local\Apps.......

这显然是由不正确的文件路径引起的,但是如何解决呢?我在网上尝试了各种方法,但似乎没有任何效果。我无法在不破坏构建的情况下从调试文件夹中移动 .xml 文件。我想我需要在构建属性中做点什么?

谢谢!

【问题讨论】:

  • 你能发布你的代码吗?
  • @TontonVelu 我的代码只是使用 LINQ 对 xml 文件执行读取功能。它使用 XDocument.Load("file.xml") 引用文件。我不会包含代码,因为我认为它不会帮助解释我的问题,这个问题更多的是关于 Visual Studio 如何更改发布后的文件结构,从而破坏我的程序。谢谢

标签: c# visual-studio winforms visual-studio-code visual-studio-2019


【解决方案1】:

您已经注意到,独立应用程序是从您的 AppData 文件夹运行的(exe 文件实际上是“解压缩”并从该临时位置运行)。

您可以使用此示例代码获取您的应用运行的路径(.exe 位置):

var processModule = Process.GetCurrentProcess().MainModule;
if (processModule == null)
{
    Environment.Exit(-1);
}
var baseDirectory = Path.GetDirectoryName(processModule.FileName);
const string settingsFile = "myfile.xml";
string fullSettingsPath = Path.Combine(baseDirectory, settingsFile);
XDocument.Load(fullSettingsPath);

为防止您的 xml 文件成为独立应用程序的一部分,您需要将其添加到您的 .csproj 文件中:

  <ItemGroup>
    <None Update="myfile.xml">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </None>
  </ItemGroup>

【讨论】:

    【解决方案2】:

    找不到文件'C:\Users\Me\AppData\Local\Apps......

    您是否通过 ClickOnce 发布了应用程序?

    如果是这样,您可以将 xml 包含在 Application Files... 中。

    并通过以下语句访问文件地址。

    string filepath = ApplicationDeployment.CurrentDeployment.DataDirectory + @"\myfile.xml";
    

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多