簡體   English   中英

Sgen和x64項目配置以創建XML Serializers程序集

[英]Sgen and x64 project configuration to create XML Serializers assembly

看起來有許多類似的問題,但沒有很好的解釋。

環境:

贏7

VS2012專業版

Windows SDK 7.0

在我們的環境中,我們生成2個代碼庫-x86和x64。 對於此特定項目,我們生成*.XMlSerializers.dll 生成序列化程序集的生成中的設置為Auto

當我將項目編譯為x64配置時,出現SGEN錯誤“嘗試以不正確的格式加載程序集... system.data.dll”。 由於進一步的調查得出以下結果,所以該錯誤完全具有誤導性:

我從sysinternals使用procmon來跟蹤SGEN

  1. AnyCpux86構建時, procmon顯示跟蹤。 使用的sgen來自C:\\Program Files\\Microsoft SDKs\\Windows\\v7.0\\Bin (32位sngen.exe)
  2. x64構建時,沒有任何痕跡,只有上面提到的錯誤

我將項目配置設置為將序列化器創建為OFF,並在x64中編譯了程序集。 然后我嘗試了命令行

  1. 成功來自在C:\\Program Files\\Microsoft SDKs\\Windows\\v7.0\\Bin\\x64使用SGEN-(請注意-這是64位sgen.exe)
  2. 在x64 Assembly上運行32位SGEN失敗。

這些結果得出一個結論:當VS2012編譯將“ 生成序列化程序集”設置為ONauto是特例)的項目時,它將嘗試查找sgen.exe 但是,當您將項目配置設置為針對x64平台構建時,它找不到合適的sgen.exe ,而該sgen.exe本身就是針對x64構建的。

問題:是否有msbuild配置或注冊表設置,或其他可以設置為允許Visual Studio找到合適的SGEN的設置?

我知道解決方法,即“生成后事件”並關閉它,但這不是重點。

一般來說,可以將此XML添加到項目文件中的特定配置中,這將指向您想要的特定sgen.exe

<SGenToolPath>C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64</SGenToolPath>

但是,為了以更廣泛的,特定於環境的方式解決我的問題,我必須將“ 生成序列化程序集”設置為“ 關閉”,並在構建后使用單獨的命令行操作

"path to your specific\sgen.exe" "path\yourFile.dll" /f

我必須這樣做,因為這里的許多開發人員都使用不同版本的VS studio等。他們設置機器,誰知道他們在哪里以及在哪里安裝。 因此,我向構建過程添加了一個特定的操作來單獨執行此步驟,因為我確切知道特定sgen.exe在構建服務器上的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM