在我的Visual Studio 2010項目中,我使用以下Post-Build事件命令行來使用sgen創建XmlSerializers.dll。XmlSerializer未使用由sgen創建的XmlSerializers.dll
後生成事件:
"$(ProgramFiles)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\sgen.exe" /a:"$(TargetPath)" /c:/keyfile:"c:\myproject\mykey.snk" /f
我的項目是強命名,所以使用相同的密鑰,以強名稱「XmlSerializers.dll」。 VS在輸出文件夾中創建XmlSerializers.dll。
但是,我注意到使用ProcessMonitor,.NET仍然在運行時調用CSC.exe。我來到這個post,其中用戶有類似的問題,並通過使用XmlSerializer(Type)構造函數解決。
我用同樣的方法在我的代碼,但它仍然調用CSC.EXE:
var fs = new FileStream(SettingsFilePath, FileMode.Open);
try
{
var serializer = new XmlSerializer(typeof(AppSettings));
settings = (AppSettings)serializer.Deserialize(fs);
}
finally
{
fs.Close();
}
我之所以需要使用預編譯的XML序列化的,因爲性能,並且還我已經有時可見CSC.EXE誤差修改Windows關機。當窗體關閉時,我的應用程序會保存數據,在關閉期間,它會失敗,因爲Windows在關閉序列期間不會允許啓動新流程。我已經看到了通過預編譯XML序列化來解決這個問題的建議。
有關爲什麼XmlSerializer不使用由sgen創建的XmlSerializers.dll的任何建議?
謝謝。
關機問題的最簡單方法是在啓動時加載數據。使用fuslogvw.exe檢查程序集解析。 –
謝謝,當MainForm關閉時,我需要保存數據(序列化爲XML)。在用戶正常關閉期間沒事,沒有錯誤,數據序列化。但是,如果我的應用程序運行和Windows關機,然後我看到CSC.exe錯誤。 – Din