我尝试使用 ApplicationSettingsBase 类的 Save 方法保存一些应用程序数据。我有一个 net 2.0 exe (BugTest.exe) 和一个 net 2.0 dll (MyLibrary.dll)。Exe 正在使用 dll(引用它)。我的主要exe代码是这样的:
public class ApplicationSettings : ApplicationSettingsBase
{
[UserScopedSetting]
[DefaultSettingValue(null)]
public Settings Settings
{
get
{
return ((Settings)this["Settings"]);
}
set
{
this["Settings"] = value;
}
}
[UserScopedSetting]
[DefaultSettingValue(null)]
public LibrarySettings LibrarySettings
{
get
{
return ((LibrarySettings)this["LibrarySettings"]);
}
set
{
this["LibrarySettings"] = value;
}
}
}
public class Settings
{
public string FirstValue { get; set; }
public string LastValue { get; set; }
}
private void btnSave_Click(object sender, EventArgs e)
{
Settings settings = new Settings {FirstValue = "1", LastValue = "2"};
LibrarySettings librarySettings = new LibrarySettings { LibrarySettings1Value = "1", LibrarySettings2Value = "2" };
ApplicationSettings applicationSettings = new ApplicationSettings {Settings = settings, LibrarySettings = librarySettings};
applicationSettings.Save();
}
MyLibrary.dll 代码是:
public class LibrarySettings
{
public string LibrarySettings1Value { get; set; }
public string LibrarySettings2Value { get; set; }
}
为我的项目使用预构建的 xmlSerialization dll 对我来说很重要。所以,然后我添加“$(FrameworkSDKDir)\Bin\sgen” /a:"$(TargetPath)" /force后建事件命令行(对于 exe 和 dll 都适用)。然后我的发布目录上有两个 xmlSerialization dll:(BugTest.XmlSerializers.dll 和 MyLibrary.XmlSerializers.dll)
我启动我的应用程序并启动进程监视器。一切正常,我的应用程序设置已成功保存。而且我看到 csc.exe(运行时编译器)在序列化期间从不运行。在没有 csc.exe 的情况下进行 Xmlserialization 对我来说也很重要。所以对我来说一切都很好。
同样在我的项目中,我必须合并 BugTest.exe 和 Mylibrary.dll。所以我使用 ILMerge 并合并了 BugTest.exe 和 MyLibrary.dll。输出是 BugTest.exe。(BugTest.XmlSerializers.dll 和 MyLibrary.XmlSerializers.dll 未合并。)当我运行并单击此合并的 BugTest.exe 的保存按钮时,可以再次将应用程序数据保存到文件中,但进程监视器屏幕提醒我此 xmlserialization 由csc.exe。BugTest.XmlSerializers.dll 和 MyLibrary.XmlSerializers.dll 与 BugTest.exe 位于同一目录中,但为什么我的应用程序这次使用 csc.exe 进行 XmlSerialization 而不是 XmlSerializers.dlls ?如何强制合并的可执行文件使用 XmlSerializers.dlls ?
注意:由于 OOP 设计,我不应该将 LibrarySettings 类代码从 MyLibrary.dll 带到 BugTest.exe 代码。