ApplicationSettingsBaseクラスのSaveメソッドを使用していくつかのアプリケーションデータを保存しようとしています。ネット2.0exe(BugTest.exe)とネット2.0 dll(MyLibrary.dll)があります。エグゼは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; }
}
プロジェクトにビルド済みのxmlSerializationdllを使用することが重要です。そこで、「$(FrameworkSDKDir)\ Bin \ sgen」/a: "$(TargetPath)" / forceビルド後のイベントコマンドライン(exeとdllの両方)を追加します。次に、リリースディレクトリに2つの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と同じディレクトリにありますが、今回、XmlSerializers.dllsの代わりにcsc.exeをXmlSerializationに使用しているアプリケーションはなぜですか?マージされた実行可能ファイルにXmlSerializers.dllsを使用させるにはどうすればよいですか?
注:OOP設計のため、LibrarySettingsクラスコードをMyLibrary.dllからBugTest.exeコードに運ぶべきではありません。