我尝试使用ApplicationSettingsBase类的保存方法保存一些应用程序数据。我有一个NET2.0exe (BugTest.exe)和一个NET2.0DLL (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 Post构建的事件命令行(用于exe和dll)。然后,我在发布目录中得到了两个xmlSerialization dll:(BugTest.XmlSerializers.dll和MyLibrary.XmlSerializers.dll)
我启动我的应用程序并启动进程监视器。一切正常,我的应用程序设置已成功保存。我看到csc.exe (运行时编译器)在序列化过程中从未运行过。对于我来说,在没有csc.exe的情况下进行for序列化也很重要。所以对我来说一切都很好。
在我的项目中,我还必须合并BugTest.exe和Mylibrary.dll。因此,我使用和合并的BugTest.exe和MyLibrary.dll。输出为BugTest.exe。(BugTest.XmlSerializers.dll和MyLibrary.XmlSerializers.dll没有合并。)当我运行并单击此合并BugTest.exe的“保存”按钮时,可以再次将应用程序数据保存到文件中,但进程监视器屏幕会提醒我csc.exe所做的这种run序列化。BugTest.XmlSerializers.dll和MyLibrary.XmlSerializers.dll与BugTest.exe位于同一个目录中,但是,为什么我的应用程序这次使用csc.exe for XmlSerialization而不是XmlSerializers.dlls呢?如何强制合并的可执行文件使用XmlSerializers.dlls ?
注意:由于OOP设计,我不应该将LibrarySettings类代码从MyLibrary.dll带到BugTest.exe代码。
发布于 2012-12-05 09:56:04
我刚刚通过改变一些过程的顺序来解决这个问题。
如果我编译该项目而不生成XMLSerialization dll,然后将BugTest.exe和MyLibrary.dll合并为一个新的BugTest.exe,然后从这个新的BugTest.exe (使用sgen)生成BugTest.XmlSerialization.dll,那么我的应用程序将完美地工作。
这篇文章http://blog.bits-in-motion.com/2009/11/xmlserializers-moduleversionid-ilmerge.html对于我的解决方案非常有用。
https://stackoverflow.com/questions/13708171
复制相似问题