Chúng tôi cũng gặp sự cố này. Chúng tôi muốn sử dụng đường dẫn tuyệt đối vì mỗi triển khai đã tạo thư mục Packages ở các vị trí khác nhau (và chúng tôi cũng có nhiều máy xây dựng). Ý tưởng là để có các gói NuGet ở một nơi, mà sẽ giải phóng bộ nhớ lãng phí từ việc có nhiều bản sao của cùng một thứ.
Vấn đề cụ thể của chúng tôi là chúng tôi có thể đặt đường dẫn tuyệt đối trong tệp NuGet.Config, gói NuGet sẽ khôi phục vị trí đó trong quá trình triển khai, nhưng sau đó không thể tìm thấy tất cả trong bước MSBuild trong cùng triển khai.
Tôi đã viết một kịch bản PowerShell để giải quyết vấn đề này. Về cơ bản nó thay thế các tham chiếu HintPath tương đối bằng đường dẫn tuyệt đối mà tôi muốn sử dụng.
#Get list of all csproj files in a solution
$dir = Get-ChildItem $pwd -Recurse
$list = $dir | Where {$_.extension -eq ".csproj"}
#Replace relative paths with absolute path
$absolutePath = 'C:\absolute\path\Packages'
function replaceRelativePath($line){
if($line -match '<HintPath>[^C].+\\Packages')
{
$relative = $matches[0] -replace '\\','\\'
return ($line -replace "$relative", "<HintPath>$absolutePath")
}
else
{
return $line
}
}
#Updating files
Foreach($file in $List)
{
(Get-Content $file.FullName)| ForEach-Object{replaceRelativePath($_)} | Set-Content $file.FullName
}
Chúng tôi đặt tập lệnh này chạy dưới dạng bước xây dựng PowerShell trước các bước MSBuild trong triển khai của chúng tôi. Kết quả là các tệp csproj được thay đổi cho thư mục làm việc trên các máy xây dựng nhưng không phải trong điều khiển nguồn Visual Studio. (Nếu bạn muốn họ thay đổi trong điều khiển nguồn, bạn có thể chạy điều này trong PowerShell và kiểm tra các thay đổi.)
Mục đích của việc muốn một đường dẫn không tương đối là gì? Tôi có thể hiểu rằng muốn có một con đường bao gồm một SpecialFolder, nhưng một con đường được mã hóa hoàn toàn cứng là không linh hoạt trên các hệ thống. – STW
@Yoooder Bạn chưa từng thấy các đường dẫn tương đối vui nhộn mà studio thích sử dụng, nó cũng có thể được mã hóa cứng. Tôi đã nhìn thấy chúng .. \ .. \ mình tất cả các con đường lên đến gốc và sau đó trở lại thư mục đích, nó là tuyệt vời. – hova
Tôi đang tìm kiếm điều này. Tại sao? Tôi có một vài phương pháp mở rộng phục hồi từ những thay đổi đột phá trong các phiên bản khác nhau của ứng dụng trong những năm qua. Cảm ơn bạn AutoDesk. Đợi đã, không. Các phương pháp Mở rộng này phổ biến trong tất cả các ứng dụng của tôi. Tôi không muốn phải vá mọi ứng dụng trên máy tính của mình vì tôi cần thay đổi hoặc thêm bản sửa lỗi cho sự không thống nhất của AutoCAD. Tôi muốn sửa nó ở một nơi. Cách duy nhất khác để làm điều này là với một máy chủ Nuget cục bộ. Quá nhiều? –