UWP部署后appsettings.json配置存储位置及修改问题
解决UWP部署后无法找到/修改appsettings.json的问题
问题根源
按照该教程配置的appsettings.json默认是作为嵌入资源编译进应用包的,不会生成独立的可修改文件,所以你在C:\Users\[user]\AppData\Local\Packages[Package ID]下找不到它——这类嵌入资源无法直接在部署后修改。
可行解决方案
1. 改为将配置文件复制到应用数据目录
- 右键项目中的
appsettings.json,在属性里设置:- 生成操作:
内容 - 复制到输出目录:
如果较新则复制
- 生成操作:
- 在应用启动时,检查应用的本地数据目录(
ApplicationData.Current.LocalFolder)是否存在该文件,若不存在,从安装目录(Package.Current.InstalledLocation)复制过去:private async Task CopySettingsToLocalIfNeeded() { var localFolder = ApplicationData.Current.LocalFolder; var installedFolder = Package.Current.InstalledLocation; var localSettingsFile = await localFolder.TryGetItemAsync("appsettings.json"); if (localSettingsFile == null) { var installedSettingsFile = await installedFolder.GetFileAsync("appsettings.json"); await installedSettingsFile.CopyAsync(localFolder); } } - 修改读取配置的逻辑,改为读取本地数据目录下的
appsettings.json,而非嵌入资源。
2. 使用UWP内置设置存储替代
如果只是保存连接字符串这类键值对,完全可以用UWP原生的ApplicationData.Current.LocalSettings,无需额外配置文件:
// 写入连接字符串 ApplicationData.Current.LocalSettings.Values["DbConnectionString"] = "你的连接字符串"; // 读取连接字符串 var connectionString = ApplicationData.Current.LocalSettings.Values["DbConnectionString"] as string;
这种方式存储的设置会直接出现在你已经找到的C:\Users\[user]\AppData\Local\Packages[Package ID]\Settings\settings.dat里,也可以通过代码直接修改,无需操作文件。
3. 若坚持使用JSON文件
除了上面的复制方案,也可以在应用首次启动时从嵌入资源读取默认配置,写入到本地数据目录的JSON文件中,后续修改直接操作本地文件即可。读取嵌入资源的代码大致如下:
private async Task<string> GetEmbeddedSettingsContent() { var assembly = typeof(App).GetTypeInfo().Assembly; using (var stream = assembly.GetManifestResourceStream("你的命名空间.appsettings.json")) using (var reader = new StreamReader(stream)) { return await reader.ReadToEndAsync(); } }
内容的提问来源于stack exchange,提问作者ccdmfc
相关产品推荐
相关产品推荐

