2010-03-30 58 views
7

我做了一些與XMLSerializer類的東西。就像我在應用程序啓動時遇到的性能問題的大多數初學者一樣。我閱讀了很多博客和文章,最後使用了SGEN工具。現在表現看起來沒問題,但對於我來說還是有些事情還不清楚。SGEN XMLSerializer - 應將.XMLSerializers.dll作爲對當前項目或GAC的引用添加?

1)我應該使用SGEN語法如下:

SGen.exe /assembly:MyAssembly /type:MyRootXmlType 

或者是不夠的,只是(我用這個語法目前,我只有一個Serializable類在我的組裝):

SGen.exe /assembly:MyAssembly 

當/ type參數在實踐中可能有用嗎?

2)I閱讀MSDN(http://msdn.microsoft.com/en-us/library/ee704594.aspx

此命令生成串行 組件 MyAssembly.XmlSerializers.dll,其 應添加作爲參考 當前項目或到GAC 。

但在所有其他博客和文章(例如在SO)我讀了這足以將MyAssembly.XmlSerializers.dll放入MyAssembly存在的文件夾中。

那麼什麼是正確的?

3)只需生成.XmlSerilizers.dll並將它與MyAssembly一起部署就足夠了,還是應該向我的代碼添加一些內容?

我不這麼認爲,但我想確保我不必更改我的代碼,並且「魔術」會自動發生。

回答

9

如果您沒有使用sgen.exe的/ type參數,那麼它將在程序集中生成所有公共類型的反序列化代碼。請注意,XML序列化中不使用[Serializable]屬性。我懷疑你會想要這個,使用/ type來保持生成的程序集很小。

無需添加引用,Xml序列化總是嘗試使用.XmlSerializers.dll程序集中的Assembly.Load()。另外,你永遠不會直接在代碼中引用生成的XmlSerializationWriterXxx和XmlSerializationReaderXxx類。它具有一個優點,當您將項目包含在解決方案中時,構建系統會自動複製程序集。

在不同的應用程序序列化和反序列化XML文件時,只需要考慮在GAC中安裝它。您也可以通過手動複製程序集來爲其他應用程序提供.XmlSerializers.dll程序集。這有點容易出錯,請在這裏使用你自己的判斷。檢查前面的段落以獲得自動化副本的方法。

+0

謝謝你非常明確的答案,問候! – binball 2010-03-31 05:26:18

相關問題