【问题标题】:publish the C# project with configuration file使用配置文件发布 C# 项目
【发布时间】:2020-02-06 08:12:24
【问题描述】:

我想发布 C# 项目,Visual Studio 2019,WPF。

一、应用发布; 二、安装应用程序; 三、应用安装完成后弹出窗口,显示错误:“An error occurred while loading the configuration file”

我想把配置文件放到发布应用中。

[Visual Studio 2019 WPF 中的代码][2]

(MainWindow.cs)

private void MainWindow_OnContentRendered(object sender, EventArgs e) { // 加载配置文件 尝试 { Config = RimageConfig.LoadFromFile("config.json"); } 抓住 { ShowError**("加载配置文件时出错", Close);** 返回; }

(config.json) { “Rk”:0.3167,// “Rb”:-1.6349, “Rg”:8.6982, “室温”:200, //"CLeft": 655, //655 "CLeft": 520, //655 “CTop”:120, “C宽度”:2350, “C身高”:2300, “帕”:100, “铅”:30, //“帕”:255, //“铅”:0, }

【问题讨论】:

  • 你能澄清一下你出版的意图吗?
  • 在其他电脑上安装并安装“publish”后,运行软件,出现错误“Loading configuration file wrong”。
  • 所以我明白了,你已经创建了你的 wpf 应用程序,我假设它可以自己运行,然后你右键单击并发布。你在其他电脑上安装什么?

标签: c# wpf config publish


【解决方案1】:

尝试将“复制到输出目录”属性设置为“始终复制”或“如果更新则复制”。在 Visual Studio 2019 中执行此操作:

  • 转到解决方案资源管理器
  • 导航到您的配置文件
  • 右键单击它
  • 属性
  • 选择所需的“复制到输出目录”值

这应该确保,当您使用 Publish 方法时,配置将被复制到发布目录。

编辑: 正如 Corentin 指出的那样,在我最初的回答中,我错过了您使用 ClickOnce 的事实。在这种情况下,您必须转到文件属性并将“构建操作”设置为Content。然后转到Project -> Properties -> Publish,点击Application Files... 并确保您的配置的发布状态和下载组分别设置为Include(Required)

【讨论】:

  • 有趣的是,我遇到了“如果更新则复制”选项的问题,在我重新启动 VS 之前,它会中断并且不再复制更新的文件。由于这导致了一个不清楚的调试地狱,我经常简单地将其设置为“始终复制”以完全避免该问题。除非您的文件过大,否则不会有任何明显的缺点。
  • 谢谢,但我的应用程序文件...发布状态没有看到我的配置。我不知道为什么
  • 您是否将配置构建操作设置为内容?如果是,请尝试检查“应用程序文件...”对话框底部的“显示所有文件”。
  • 我可以在发布时向我的应用程序添加图标吗?
【解决方案2】:

配置文件可能不应该在编译时静态定义,否则它会破坏其以后无需重建即可编辑的目的。

您的应用程序应该在没有有效配置文件的情况下启动,因为该文件将被最终用户编辑并因此包含错误。

如果您只需要静态配置文件,您可以将配置文件“构建操作”更改为“嵌入式资源”并使用Assembly.GetExecutingAssembly().GetManifestResourceStream() 方法加载它。这意味着它们在构建后将不再可编辑。

如果配置文件不存在,您也可以让您的代码在启动时创建配置文件,并用默认值填充它(例如,使用从嵌入式配置文件加载的默认值)。

【讨论】:

  • 发布后可以更改配置,并不意味着在编译时提供默认配置就“达不到目的”。使用自动生成不一定会发生这种情况,因为您可能不希望其配置文件神秘消失(无论出于何种原因)的应用程序静默生成新的配置文件并继续工作。它是基于你想要发生的事情的上下文。
猜你喜欢
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多