2015-09-10 44 views
0

我想寫一個單元測試來驗證解決方案的所有csproj文件中使用的dll版本是否正確。例如,我在1 dll引用的csproj文件中像這樣我如何閱讀csproj文件中的dll版本C#

<Reference Include="Moq, Version=4.2.1408.511, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\..\packages\Moq.4.2.1408.0511\lib\net40\Moq.dll</HintPath> 
</Reference> 

所以在這裏我想讀的起訂量版本4.2.1408.511,並以「4.2.1408.511」字符串比較。 我如何編寫單元測試來做到這一點

+0

難道你們就不能只是打開的csproj文件,XML,然後XPath的入'Reference'元素和閱讀'Include'屬性和自己解析版? (順便說一句,我認爲這是一個非常奇怪的事情來測試,但我相信你有你的理由)。 – kha

+0

好吧,讓我試試這個。 – varun

+0

如果不是。只是建立一個正則表達式來獲取您的信息。 [here](http://www.regex101.com)'很好的幫助站點 –

回答

1

我覺得這個測試不是單位,這是整合。無論如何,你可以用這種方式檢查的程序集的版本:

var anyTypeOfAssembly = typeof(Mock<>); 
var targetAssembly = anyTypeOfAssembly.Assembly; 
var versionInfo = FileVersionInfo.GetVersionInfo(targetAssembly.Location); 
var fileVersion = versionInfo.FileVersion; 
Assert.AreEqual("4.2.1408.511", fileVersion); 
+0

請注意,文件版本可能與程序集版本不匹配(一個來自資源信息,另一個來自程序集元數據 - http://stackoverflow.com/問題/ 2221598/fileversioninfo-getversioninfo-不正確,在控制檯應用程序)。 –

+0

thnx馬克,它正在努力獲得dll版本的程序集,但我修改了csproj文件,下面的版本是 而不是4.2.1408.511我修改了4.2.1408.512 \t 但仍然測試通過它正在檢查Moq dll 4.2。 1408.511 測試應該失敗,但它通過 – varun

+0

@varun正如我所見,沒有版本4.2.1408.512,我只發現了4.2.1408.511。我檢查了兩個不同版本的Moq,並且代碼正常。 –