首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ApplicationSettingsBase和XmlSerialization在合并的可执行文件上不使用csc.exe就不能工作

ApplicationSettingsBase和XmlSerialization在合并的可执行文件上不使用csc.exe就不能工作
EN

Stack Overflow用户
提问于 2012-12-04 17:06:56
回答 1查看 307关注 0票数 1

我尝试使用ApplicationSettingsBase类的保存方法保存一些应用程序数据。我有一个NET2.0exe (BugTest.exe)和一个NET2.0DLL (MyLibrary.dll)。Exe正在使用dll (引用它)。我的主要exe代码是这样的:

代码语言:javascript
复制
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代码是:

代码语言:javascript
复制
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代码。

EN

回答 1

Stack Overflow用户

发布于 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对于我的解决方案非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13708171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档