我想製作一個自動化的powershell腳本,它報告項目的參考和參考路徑。 當.csproj中的hintpath未被填充時,我無法找到獲取引用路徑的方法。如何通過* .csproject文件找到參考路徑
4
A
回答
2
這是一個快速解決方案。它抓取當前目錄下的每個.csproj
文件,並檢查每個引用。對於從GAC引用的程序集,只輸出名稱。對於GAC外的裝配,輸出裝配的完整路徑。
$projectFiles = get-childitem . *.csproj -Recurse
foreach($projectFile in $projectFiles)
{
$projectXml = [xml] (get-content $projectFile.FullName)
$projectDir = $projectFile.DirectoryName
Write-Host "# $($projectFile.FullName) #"
foreach($itemGroup in $projectXml.Project.ItemGroup)
{
if($itemGroup.Reference.Count -eq 0)
{
continue
}
foreach($reference in $itemGroup.Reference)
{
if($reference.Include -eq $null)
{
continue
}
if($reference.HintPath -eq $null)
{
Write-Host ("{0}" -f $reference.Include)
}
else
{
$fullpath = $reference.HintPath
if(-not [System.IO.Path]::IsPathRooted($fullpath))
{
$fullPath = (join-path $projectDir $fullpath)
$fullPath = [System.IO.Path]::GetFullPath("$fullPath")
}
Write-Host $fullPath
}
}
}
Write-Host ''
}
注意,默認情況下,有一些的MSBuild看起來找到沒有暗示路徑引用的位置,一些註冊表項。你能看到的MSBuild的外觀和它由具有詳細記錄編譯定位程序集的開啓:
msbuild My.csproj /t:build /v:d
0
一個(hacky)解決方案可以確保所有引用都將「Copy Local」設置爲true。這樣,任何dll引用將總是結束在/ bin目錄,因此你有一個路徑。
但是,如果意圖是將所有引用的程序集都放在一個地方,那麼根據環境的其餘部分,甚至可以將GAC中存在的引用複製到本地副本也可能沒有意義。
相關問題
- 1. 組組件參考路徑
- 2. 參考.properties文件中的類路徑
- 3. 如何通過文件路徑通過mkdir創建文件夾?
- 4. 查找ISM文件中使用的路徑變量的參考
- 5. 如何找到文件路徑
- 6. 如何從Ant中的參考路徑中排除文件?
- 7. 如何找到任何特定文件的路徑,「就像搜索」,通過python
- 8. 通過路徑參數
- 9. 參考中沒有路徑
- 10. 如何通過參考
- 11. 如何通過命令行參數傳遞文件路徑到程序
- 12. 如何從Windows服務通過批處理文件找到Tomcat路徑
- 13. 獲取列出的參考文件的路徑csproj文件
- 14. MSBuild - 設置參考路徑
- 15. Cocoapod路徑參考錯誤
- 16. 數組與參考文件的路徑打開文件
- 17. 關於參考路徑
- 18. make的參考路徑
- 19. 如何找到SP參考
- 20. MSBuild通過具有多個參考路徑的命令行
- 21. vb6更改參考路徑
- 22. 設置.dll參考路徑
- 23. Visual Studio參考路徑,找不到引用?
- 24. 如何通過IMG活動找到自定義路徑
- 25. 我如何通過布爾數組找到路徑?
- 26. 貓鼬:找到所有參考文件
- 27. 通過參考
- 28. 通過參考
- 29. 通參數POST通過路徑
- 30. 路徑變量:查找特定文件的文件夾路徑
我可能是錯的,但我相信,暗示路徑中的csproj文件的唯一路徑。如果未填充,我希望編譯器在GAC和其他常用文件夾(如bin)中查找以查找引用。在那裏我相信如果提示路徑沒有被填充,它就根本找不到。 – 2011-03-15 15:10:02
當然,您可以查看將要搜索的常用文件夾 - 如項目中的bin /和系統文件夾。然而,要問的更好的問題是*爲什麼*你想要這個?你需要什麼路徑? – 2011-03-15 15:13:43
有一些引用沒有用hintpath列出,但不在GAC中,但構建服務仍然可以找到它們。例如telerik dll的。這很煩人,因爲我基於自己添加的dll被列出了一條提示路徑的事實,但它似乎並非全部都是。 – woutvdd 2011-03-15 15:14:46