使用配置文件发布 C# 项目
publish the C# project with configuration file
我要发布C#项目,Visual Studio 2019 ,WPF.
首先,应用发布;
二、安装应用;
三、应用安装完成后弹出一个window,显示错误:"An error occurred while loading the configuration file"
我想把配置文件放在发布应用程序中。
[Visual Studio 2019 WPF 中的代码][2]
(MainWindow.cs)
private void MainWindow_OnContentRendered(object sender, EventArgs e)
{
//加载配置文件
尝试
{
配置=RimageConfig.LoadFromFile("config.json");
}
抓住
{
ShowError**("An error occurred while loading the configuration file", 关闭);**
return;
}
(config.json)
{
"Rk": 0.3167,//
"Rb":-1.6349,
"Rg": 8.6982,
"Rt": 200,
//"CLeft": 655, //655
"CLeft": 520, //655
"CTop": 120,
"CWidth": 2350,
"CHeight": 2300,
"Pa": 100,
"Pb": 30,
//"Pa": 255,
//"Pb": 0,
}
一个配置文件可能不应该在编译时静态定义,否则它会破坏其稍后无需重建即可编辑的目的。
您的应用程序应该可以在没有有效配置文件的情况下启动,因为该文件将由最终用户编辑并因此包含错误。
如果您只需要一个静态配置文件,您可以将您的配置文件"Build Action"更改为"Embedded Resource"并使用Assembly.GetExecutingAssembly().GetManifestResourceStream()
方法加载它。这意味着它们在构建后将不再可编辑。
如果配置文件不存在,您也可以让代码在启动时创建配置文件,并用默认值填充它(例如,使用从嵌入式配置文件加载的默认值)。
尝试将 "Copy to Output Directory" 属性 设置为 "Copy always" 或 "Copy if newer"。要在 Visual Studio 2019 年做到这一点:
- 转到解决方案资源管理器
- 导航到您的配置文件
- 右击它
- 属性
- Select 期望 "Copy to Output Directory" 价值
这应该确保,当您使用 Publish 方法时,配置将被复制到发布目录。
编辑:
正如 Corentin 所指出的,在我最初的回答中,我忽略了您正在使用 ClickOnce 的事实。在这种情况下,您必须转到文件属性并将 "Build Action" 设置为 Content
。然后转到 Project -> Properties -> Publish
,单击 Application Files...
并确保您的配置的发布状态和下载组分别设置为 Include
和 (Required)
。
我要发布C#项目,Visual Studio 2019 ,WPF.
首先,应用发布; 二、安装应用; 三、应用安装完成后弹出一个window,显示错误:"An error occurred while loading the configuration file"
我想把配置文件放在发布应用程序中。
[Visual Studio 2019 WPF 中的代码][2]
(MainWindow.cs)
private void MainWindow_OnContentRendered(object sender, EventArgs e) { //加载配置文件 尝试 { 配置=RimageConfig.LoadFromFile("config.json"); } 抓住 { ShowError**("An error occurred while loading the configuration file", 关闭);** return; }
(config.json) { "Rk": 0.3167,// "Rb":-1.6349, "Rg": 8.6982, "Rt": 200, //"CLeft": 655, //655 "CLeft": 520, //655 "CTop": 120, "CWidth": 2350, "CHeight": 2300, "Pa": 100, "Pb": 30, //"Pa": 255, //"Pb": 0, }
一个配置文件可能不应该在编译时静态定义,否则它会破坏其稍后无需重建即可编辑的目的。
您的应用程序应该可以在没有有效配置文件的情况下启动,因为该文件将由最终用户编辑并因此包含错误。
如果您只需要一个静态配置文件,您可以将您的配置文件"Build Action"更改为"Embedded Resource"并使用Assembly.GetExecutingAssembly().GetManifestResourceStream()
方法加载它。这意味着它们在构建后将不再可编辑。
如果配置文件不存在,您也可以让代码在启动时创建配置文件,并用默认值填充它(例如,使用从嵌入式配置文件加载的默认值)。
尝试将 "Copy to Output Directory" 属性 设置为 "Copy always" 或 "Copy if newer"。要在 Visual Studio 2019 年做到这一点:
- 转到解决方案资源管理器
- 导航到您的配置文件
- 右击它
- 属性
- Select 期望 "Copy to Output Directory" 价值
这应该确保,当您使用 Publish 方法时,配置将被复制到发布目录。
编辑:
正如 Corentin 所指出的,在我最初的回答中,我忽略了您正在使用 ClickOnce 的事实。在这种情况下,您必须转到文件属性并将 "Build Action" 设置为 Content
。然后转到 Project -> Properties -> Publish
,单击 Application Files...
并确保您的配置的发布状态和下载组分别设置为 Include
和 (Required)
。