2013-03-06 64 views
0

我們經常遇到麻煩,因爲我們解決方案中的項目/軟件包引用配置錯誤(例如,需要特定版本的不正確)。我想編寫一個簡單的NUnit測試來檢查這些類型的案例,以便我們儘早地抓住它們。理想情況下,我會在程序集上使用反射,而不是自己解析csproj文件。這可能嗎?是否可以通過編譯程序集上的反射來獲取csproj文件中的所有信息?是否可以反映csproj程序集引用的細節?

+0

您無法從編譯後的輸出程序集中獲取該信息,但可以使用「Microsoft.Build」命名空間來執行項目文件......您是否可以訪問csproj文件? – JerKimball 2013-03-06 21:19:37

+0

編譯時,存儲在.csproj文件中的一些細節會丟失,但您應該能夠獲取所有引用的程序集及其版本。這足夠嗎? – driis 2013-03-06 21:19:40

+0

擴展@ JerKimball的評論,看看['Microsoft.Build.Evaluation.Project'類](http://msdn.microsoft.com/en-us/library/microsoft.build.evaluation.project.aspx )。 – 2013-03-06 21:28:04

回答

1

您可以通過調用Assembly.GetReferencedAssemblies來獲得特定程序集的引用,該引用將返回被引用的AssemblyName。這包括名稱和版本。

Assembly a = Assembly.ReflectionOnlyLoadFrom(fileName); 
var references = a.GetReferencedAssemblies(); 
+0

Derp - 當然:@ChaseMedallion如果你以後所有的東西都是引用的程序集,這應該爲你做。 – JerKimball 2013-03-06 21:30:39

+0

假設'.csproj'文件包含實際未使用的引用。就像它引用'System.Data'程序集一樣,但實際上卻沒有任何東西(沒有類,結構,接口,枚舉或委託類型)。在這種情況下'GetReferencedAssemblies()'返回'System.Data'程序集嗎? – 2013-03-06 21:39:43

+0

但是版本是否是實際裝配的版本或者參考指定的版本?如果引用沒有指定版本會怎麼樣? – ChaseMedallion 2013-03-06 21:43:21

相關問題