我們經常遇到麻煩,因爲我們解決方案中的項目/軟件包引用配置錯誤(例如,需要特定版本的不正確)。我想編寫一個簡單的NUnit測試來檢查這些類型的案例,以便我們儘早地抓住它們。理想情況下,我會在程序集上使用反射,而不是自己解析csproj文件。這可能嗎?是否可以通過編譯程序集上的反射來獲取csproj文件中的所有信息?是否可以反映csproj程序集引用的細節?
回答
您可以通過調用Assembly.GetReferencedAssemblies
來獲得特定程序集的引用,該引用將返回被引用的AssemblyName。這包括名稱和版本。
Assembly a = Assembly.ReflectionOnlyLoadFrom(fileName);
var references = a.GetReferencedAssemblies();
Derp - 當然:@ChaseMedallion如果你以後所有的東西都是引用的程序集,這應該爲你做。 – JerKimball 2013-03-06 21:30:39
假設'.csproj'文件包含實際未使用的引用。就像它引用'System.Data'程序集一樣,但實際上卻沒有任何東西(沒有類,結構,接口,枚舉或委託類型)。在這種情況下'GetReferencedAssemblies()'返回'System.Data'程序集嗎? – 2013-03-06 21:39:43
但是版本是否是實際裝配的版本或者參考指定的版本?如果引用沒有指定版本會怎麼樣? – ChaseMedallion 2013-03-06 21:43:21
- 1. 是否可以通過C#反映VB.NET .dll程序集#
- 2. 是否可以禁用.NET程序集的反射?
- 3. 是否可以通過反射來引用特定版本的程序集?
- 4. 是否可以從ColdFusion引用.NET程序集?
- 5. 是否可以反映主辦大會?
- 6. 使用System.Diagnostics.Process來反映引用的程序集?
- 7. Microsoft.Windows.Controls是否缺少程序集引用?
- 8. csproj中的通配符程序集引用
- 9. Silverlight 5程序集可以引用Silverlight 4程序集嗎?
- 10. 哪一個是csproj文件中的程序集引用的正確方法?
- 11. 是否可以反編譯SQL Server CLR存儲過程程序集?
- 12. 包含非CLS兼容引用的程序集是否可以符合CLS?
- 13. 是否可以添加對現有應用程序的引用
- 14. 是否可以將VirtualStringTree用於主細節網格視圖?
- 15. 獲取所有引用程序集以及應用程序引用程序集的引用程序集等
- 16. 是否可以使用另一個程序集中的Global.asax?
- 17. 是否可以使用SSL證書籤署我的程序集?
- 18. 是否可以反編譯和調試Java應用程序?
- 19. 應用程序是否可以反編譯?
- 20. 是否可以使用EF4.x映射值對象的集合?
- 21. 以下條件是否可以反映在EER圖中?
- 22. 是否可以從.NET 4.0 Client Profile項目引用Azure SDK 1.1 Microsoft.WindowsAzure。*程序集?
- 23. 是否可以使用adobe flex的引導程序?
- 24. iOS XCode應用程序可以引用MonoTouch程序集嗎?
- 25. 集合元素是否可以引用集合?
- 26. 是否可以輕鬆地對C++ .Net程序集進行反編譯?
- 27. 是否可以在數據庫中使用反序列化的文件引用?
- 28. 是否可以映射mod_rewrite URL的反向?
- 29. 是否可以反映VS2012的XAML標記?
- 30. 服務引用是否可以重用正在添加引用的程序集中的類?
您無法從編譯後的輸出程序集中獲取該信息,但可以使用「Microsoft.Build」命名空間來執行項目文件......您是否可以訪問csproj文件? – JerKimball 2013-03-06 21:19:37
編譯時,存儲在.csproj文件中的一些細節會丟失,但您應該能夠獲取所有引用的程序集及其版本。這足夠嗎? – driis 2013-03-06 21:19:40
擴展@ JerKimball的評論,看看['Microsoft.Build.Evaluation.Project'類](http://msdn.microsoft.com/en-us/library/microsoft.build.evaluation.project.aspx )。 – 2013-03-06 21:28:04