今天我得到一個爲'產品版本'指定的版本不是正常的'major.minor.build.revision'格式警告。爲什麼警告CS1607「爲'產品版本'指定的版本不是以正常的'major.minor.build.revision'格式生成的?
這與使用AssemblyInformationalVersionAttribute
有關。
我組裝的屬性有:
[assembly: AssemblyInformationalVersion("XXX 1.1.0")]
[assembly: System.Runtime.InteropServices.ComVisible(false)]
基本上,編譯器會抱怨XXX 1.1.0
這看起來並不像x.y.z.r
。來自MSDN:
信息版本以字符串格式爲程序集提供了 的其他版本信息。它僅供參考,僅供參考 ,並未在運行時使用。儘管您可以指定任何文本,但如果字符串不是彙編版本號使用的 格式,或者格式爲 但包含通配符,則編譯時會出現 警告消息。這個警告是無害的。
所以他們說一個警告是無害可以發生。問題是,它打破了我的構建。我甚至無法抑制CS1607的警告(我試圖在項目級別,沒有影響),如下面的錯誤建議:http://connect.microsoft.com/VisualStudio/feedback/details/275197/assemblyinformationalversion-should-not-generate-cs1607
事實上,一切都很好(沒有警告),直到我將本地化資源添加到我的項目。我之前在項目中有一個MyResources.resx
文件。我添加了一個本地化的MyResources.fr.resx
文件,並且此資源是警告的來源(或者至少:如果我從項目中刪除此文件,它會在沒有警告的情況下編譯)。
我沒有看到任何CS1607之間AssemblyInformationalVersionAttribute
和本地化的資源文件鏈接(與64 VS 86),...
我怎麼能解決我的項目,所以我可以使用XXX 1.1.0
爲AssemblyInformationalVersionAttribute
沒有任何(甚至無害)警告?
我對抑制CS1607警告並沒有那麼好(這可能對錯誤引用有用),但我甚至沒有設法抑制它。
請注意我發現它是CS1607通過谷歌搜索,編譯器從來沒有返回實際的警告代碼。
另請注意我的項目目標.Net 2.0,並轉移到.net 4.0修復問題(但我當然不能這樣做)。
歡迎任何解釋。
PS: CS1607: The version specified for the 'file version' is not in the normal 'major.minor.build.revision' format in .NET是問題是沒有關係的(不是AssemblyInformationalVersion
)
編輯: 感謝漢斯帕桑特。從你的回答中,我知道AssemblyInformationalVersion
用於生成Win32 VersionInfo
結構中可用的兩個ProductVersion
值。
- 如果
AssemblyInformationalVersion
屬性爲空,則使用AssemblyVersion
代替。 - 如果
AssemblyInformationalVersion
是x.y.z
,則ProductVersion
的值都是x.y.z
。 - 如果
AssemblyInformationalVersion
是另一個字符串,則未設置ProductVersion
的數值(0.0.0
),並且僅設置文本ProductVersion
的值。
我不明白,是爲什麼的CS1607警告只有在某些特定情況下,編譯器生成:在我的情況下,只有當項目包含本地化的resx文件和麪向.NET 2.0。
我在AssemblyInformationalVersion
中使用了一個字符串多年,沒有任何警告,直到昨天,當我添加一個本地化的resx到項目。
我沒有數字ProductVersion
值設置(如你所說,只有文本和人類可讀的值對我很重要),但是有沒有辦法來防止警告被提出?
編輯2:
我已經創建了一個演示問題非常小的解決方案示例:http://sharesend.com/mb371c3l
- 首先編譯:編譯器提出的預期CS1607。
- 然後刪除
Logon.aspx.fr.resx
並重建所有:在我的機器上不再發出警告,原因不明。
非常感謝您的詳細解答。我編輯了原始問題,添加了一些關於我對這個問題的理解的背景。請看看編輯。 – ken2k
我不明白,現在應該清楚爲什麼你應該*得到警告。不清楚的是爲什麼你*以前沒有得到警告。或者,也許你做了,而且你做了一些令人不可思議的事情,導致構建失敗的警告。這並不重要,請盡你所能去做,以免造成構建失敗。使用真正的版本號而不是「XXX 1.1.0」作爲明顯的解決方案。 –
@HansPassant是的,我很清楚爲什麼我會得到警告。我不清楚的是,爲什麼警告突然出現在今天,而不是在過去兩年內出現相同的代碼(請參閱我的問題了解我今天所做的更改)。不幸的是,由於某些原因,我無法修復「XXX 1.1.0」爲「1.1.0」(我無法改變文本ProductVersion的顯示方式,因爲我已經使用此模式發佈了很多我的版本) 。想要實現的目的是爲了隱藏這個非常具體的組件的警告,所以我的構建不會失敗(我配置了TFS,因此在發出警告的情況下拒絕構建)。 – ken2k