2010-05-10 137 views
0

我正在試驗Assembly和File版本號。儘管我的程序在IDE中運行良好,但是在創建安裝文件並使用InvalidDeploymentException安裝應用程序崩潰之後。C#.NET應用程序在啓動後立即崩潰

我該怎麼做才能解決此問題?

+0

你可以發佈你的異常/堆棧跟蹤等的全部細節? – 2010-05-10 11:13:02

+0

我能夠通過增加程序集和文件版本來解決它。 在崩潰之前,我將其設置爲1.0.0.4,然後將其重新設置爲1.0.0.0。這導致了崩潰,但我將其更改爲1.0.0.5,現在它可以正常工作。無論如何,這兩個數字需要什麼? – 2010-05-10 11:29:33

回答

1

[AssemblyVersion]和[AssemblyFileVersion]屬性扮演不同的角色。 [AssemblyVersion]僅對託管代碼可見,對GAC很重要。無論何時在程序集的公共接口中進行重大更改,您都應該將此數字提高。

編譯器使用/ win32res命令行選項將非託管資源嵌入到程序集中。這包括VERSIONINFO resource,可由所有非託管代碼讀取,包括shell。它決定了當您在資源管理器中右鍵單擊該程序集並查看「詳細信息」屬性頁時看到的內容。顯示的「文件版本」值由[AssemblyFileVersion]屬性設置。 [AssemblyVersion]值在此處不可見,Explorer尚未知道如何讀取該值。

由您來決定如何使用此屬性。崩潰表明在部署代碼中進行了一些最低限度的完整性檢查,從未試圖讓自己錯誤地看到會發生什麼。然而,讓它們相同將會很有意義。

Microsoft以不同的方式使用[AssemblyFileVersion],它們會自動爲每個構建增加它並釘住[AssemblyVersion]。這是一個好主意和我使用的策略。然而非常具有諷刺意味的是,自動版本遞增功能正好相反,它只能自動遞增[AssemblyVersion]。嘆。