Vil*_*nen 5 .net c# settings portability
我一直在寻找修改多普勒播客聚合器的来源,目标是能够直接从我的MP3播放器运行程序.
多普勒使用Visual Studio设计器生成的Settings类存储应用程序设置,该类默认将用户设置序列化到用户的主目录.我想改变它,以便所有设置都存储在与exe相同的目录中.
看来这可以通过创建继承SettingsProvider类的自定义提供程序类来实现.有没有人创建过这样的提供商并希望共享代码?
更新:通过使用此MSDN示例,即使用简单的继承,我能够使自定义设置提供程序几乎正常工作.我最初感到困惑,因为Windows Forms设计器停止工作,直到我在Codeproject上做了这个技巧:
internal sealed partial class Settings
{
private MySettingsProvider settingsprovider = new MySettingsProvider();
public Settings()
{
foreach (SettingsProperty property in this.Properties)
{
property.Provider = settingsprovider;
}
...
Run Code Online (Sandbox Code Playgroud)
该程序仍然以窗口大小0; 0开始.
有任何见解的人吗?
Oha*_*der 15
为什么不按原样使用CodeProject PortableSettingsProvider解决方案(稍作修改)?我已经在我的项目(StreamRecorder.NET)中成功完成了这项工作.
关于项目页面的一些评论很有用:
我最终得到的代码:
static void Main(string[] args)
{
if (args.Contains("-p") || args.Contains("--portable"))
{
MakePortable(Properties.Settings.Default);
MakePortable(Properties.LastUsedSettings.Default);
MakePortable(Properties.DefaultSettings.Default);
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(args));
}
private static void MakePortable(ApplicationSettingsBase settings)
{
var portableSettingsProvider =
new PortableSettingsProvider(settings.GetType().Name + ".settings");
settings.Providers.Add(portableSettingsProvider);
foreach (System.Configuration.SettingsProperty prop in settings.Properties)
prop.Provider = portableSettingsProvider;
settings.Reload();
}
Run Code Online (Sandbox Code Playgroud)
最后,我对CP项目进行了以下更改:
string _fileName;
public PortableSettingsProvider(string fileName)
{
_fileName = fileName;
}
public virtual string GetAppSettingsFilename()
{
//Used to determine the filename to store the settings
//return ApplicationName + ".settings";
return _fileName;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9158 次 |
| 最近记录: |