“Không thể cập nhật các phần phụ thuộc của dự án” sau khi cam kết Subversion


87

Tôi có một dự án thiết lập trong .NET. Khi tôi lưu dự án và các dự án khác để lật đổ, dự án thiết lập không còn biên dịch nữa. Tôi gặp lỗi "Không thể cập nhật các phụ thuộc của dự án."

Câu trả lời:


50

Có một chủ đề thảo luận dài về điều này trên MSDN. Có vẻ như có nhiều nguyên nhân có thể xảy ra. Cuộc thảo luận bao gồm một số liên kết cho vấn đề này từ Microsoft. Đây là một hotfix cho VS2005 và đây là một giải pháp cho VS2010.


21
Cách tiếp cận "loại bỏ và sau đó thêm lại dự án" phù hợp với tôi.
Mike Fuchs

1
+1 Tôi đã phải sửa đường dẫn phụ thuộc theo cách thủ công trong tệp .VDPROJ. Xem câu trả lời của tôi để có thể giành chiến thắng trong một thời gian. Các hotfix không giúp được gì cả.
Marc

9
+1 đến radbyx. Bình luận đơn giản của bạn có thể đã cứu tôi một giờ thất vọng :)
JOpuckman

4
Khởi động lại cũng sửa được cho tôi. Cảm ơn radbyx!
Josh Lowry

Đóng dung dịch, sau đó mở lại. Điều này làm việc cho tôi :-)
FIV

93

Đóng VS2010 và sau đó mở lại nó luôn hoạt động với tôi :)


4
Ngài thật tuyệt vời.
Panda Pajama

3
Thực tế là tôi đã tìm kiếm vấn đề này, đến đây và thấy rằng tôi đã ủng hộ câu trả lời này cho tôi biết rằng điều này có thể sẽ phù hợp với tôi. Và nó đã làm.
jcollum

1
Bạn ạ, một lần nữa thật tuyệt vời!
Panda Pajama

32

Tôi đã gặp vấn đề tương tự, nhưng không có giải pháp nào được đề cập có vẻ phù hợp với tôi. Việc xây dựng lại dự án thiết lập sẽ hiệu quả, nhưng đó là một điều khó khăn, vì chúng tôi bao gồm đầu ra của dự án của hơn 30 dự án.

Điều tôi thấy có hiệu quả là một cách tiếp cận rất giống với những gì @Marc đã làm.

  1. Tôi đã lưu ý những phụ thuộc nào đã được Visual Studio báo cáo là lỗi
  2. Chỉnh sửa tệp .vdproj trong Notepad ++
  3. Tìm kiếm .dll đang gây ra sự cố. Bạn sẽ thấy phần "ScatterAssemblies". Nếu nó trống, hãy xóa toàn bộ tham chiếu dll
  4. Lưu tập tin

Trong mọi trường hợp, tôi có nhiều tham chiếu đến cùng một dll (không chắc điều này đã xảy ra như thế nào)

Ví dụ về tham chiếu đúng:

"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_11EC89A306FFB83A269ACC2BF8D8462B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Some.OrOther.Lib, Version=1.601.4042.16978, Culture=neutral, processorArchitecture=MSIL"
                "ScatterAssemblies"
                {
                                "_11EC89A306FFB83A269ACC2BF8D8462B"
                                {
                                "Name" = "8:Some.OrOther.Lib.dll"
                                "Attributes" = "3:512"
                                }
                }
"SourcePath" = "8:Some.OrOther.Lib.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_79891234C744498C83755DDEA682F0BF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}

Ví dụ về tham chiếu không chính xác:

"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_11EC89A306FFB83A269ACC2BF8D8462B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Some.OrOther.Lib, Version=1.601.4042.16978, Culture=neutral, processorArchitecture=MSIL"
                "ScatterAssemblies"
                {
                }
"SourcePath" = "8:Some.OrOther.Lib.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_79891234C744498C83755DDEA682F0BF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}

Tôi cũng nhận được cảnh báo tương tự "Hai hoặc nhiều đối tượng có cùng vị trí đích ('[targetdir] \ MyAssembly.dll')" rằng @Marc đã nhận ... nhưng dự án thiết lập biên dịch và chạy tốt.


2
Tôi đã xóa tất cả các Filetham chiếu lắp ráp. Hoạt động hoàn hảo.
MartinHN

Điều này, rất nhiều lần. Tôi đã vò đầu bứt tóc để giải quyết những lỗi này và không có cách sửa lỗi nào khác được đề xuất đã hoạt động.
John Källén

Điều này có hiệu quả với tôi khi xóa toàn bộ nội dung phần Tệp thì không.
alan

10

Liên kết chính xác để sửa lỗi nóng cho VS2010 là:

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681

Hoạt động tốt sau khi cài đặt


1
Điều này đã làm việc cho tôi. Không khởi động lại VS và chỉnh sửa .vdproj.
Colin Pickard

Microsoft Connect đã ngừng hoạt động và liên kết ở trên đưa chúng ta đến một trang mà không cần phải cho biết hotfix này hiện nằm ở đâu.
dotNET

6

Tôi đã gặp sự cố tương tự và đã tìm thấy cách khắc phục trong cuộc thảo luận rất dài và cũ này trên MSDN .
Như người dùng 'Jeff Hunsaker' vào thứ Năm, ngày 26 tháng 8 năm 2010 đã trả lời 5:51 CH (không thể liên kết trực tiếp):

Tôi vừa gặp phải vấn đề này khi nâng cấp Visual Studio 2008 Deployment Projects lên VS 2010. Giải pháp của Hans (ở trên) phù hợp với tôi.

  1. Chỉnh sửa tệp .vdproj trong Notepad.
  2. Tìm kiếm "SourcePath" = "8:
  3. Đối với mỗi assembly / dll, hãy cung cấp đường dẫn đầy đủ
  4. Lưu tập tin

Trong tệp .vdproj của mình, tôi có một số mục nhập chỉ đơn giản là tham chiếu đến assembly:
"SourcePath" = "8: MyAssembly.DLL"

Mặc dù Visual Studio [bằng cách nào đó] biết vị trí tệp, tôi vẫn nhận được lỗi "Không thể cập nhật các phần phụ thuộc của dự án" cho đến khi tôi cung cấp đường dẫn đầy đủ:

"SourcePath" = "8: .. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL"

Trân trọng,

Jeff ...

Tôi đã lưu ý những phụ thuộc nào đã được Visual Studio báo cáo và viết một tập lệnh để sửa chúng trong trường hợp điều này là bắt buộc.

Lưu ý rằng điều này hiện đưa ra cho tôi một cảnh báo "Hai hoặc nhiều đối tượng có cùng vị trí đích ('[targetdir] \ MyAssembly.dll'). Nhưng tôi có thể sống với điều đó.


4

Điều này đã giải quyết được cùng một vấn đề đối với tôi: Tôi đã thêm các hội đồng được đề cập trong thông báo lỗi vào GAC. Khi tôi biên dịch lại dự án, dll xuất hiện trong "Sự phụ thuộc được phát hiện" trong Trình khám phá giải pháp và tôi gặp lỗi tương tự. Sau đó, tôi đã loại trừ dll (nhấp chuột phải và chọn Loại trừ) và cuối cùng dự án được biên dịch ok.


3

Sự cố có thể do tệp mồ côi trong phần "Có thể triển khai" -> "Tệp" của tệp .vdproj gây ra. Bạn có thể xác minh điều này bằng cách xóa tất cả các tệp khỏi dự án thiết lập trong Visual Studio (tạo bản sao lưu trước). Nếu bạn mở tệp .vdproj bằng trình soạn thảo văn bản và vẫn thấy các mục nhập trong phần "Tệp" thì bạn gặp sự cố này. Bạn có thể ghi lại khóa của các tệp này và xóa chúng khỏi tệp .vdproj ban đầu và nó sẽ hoạt động trở lại.

Ngoài ra, biên dịch chương trình sửa lỗi nhanh này (chỉ được thử nghiệm với Visual Studio 2010):

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

class Program {
    static void Main(string[] args) {
        try {
            if (args.Length == 0) {
                Console.WriteLine("FixVDProj <path to .vdproj file>");
                return;
            }

            if (!File.Exists(args[0])) {
                throw new Exception("File " + args[0] + " does not exist!");
            }

            string[] strarSource = File.ReadAllLines(args[0]);
            List<string> listDest = new List<string>();
            List<string> listKnownKeys = new List<string>();

            int iSection = 0;
            bool bAccept = true;
            bool bNeedFix = false;

            foreach (string strLine in strarSource) {
                switch (iSection) {
                    case 0:
                        if (strLine.Trim() == "\"DeployProject\"") {
                            listDest.Add(strLine);
                            iSection++;
                        } else {
                            throw new Exception("\"DeployProject\" not found");
                        }
                        break;

                    case 1:
                        if (strLine.Trim() == "\"Hierarchy\"") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 2:
                        if (strLine.Trim().StartsWith("\"MsmKey\" = ")) {
                            int p = strLine.IndexOf('=');
                            string strMsm = strLine.Substring(p + 1).Trim();
                            if (strMsm.StartsWith("\"8:") && strMsm.EndsWith("\"")) {
                                listKnownKeys.Add(strMsm.Substring(3, strMsm.Length - 4));
                            } else {
                                throw new Exception("Invalid MsmKey " + strMsm);
                            }
                        } else if (strLine.Trim() == "\"Deployable\"") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 3:
                        if (strLine.Trim() == "\"File\"") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 4:
                        if (strLine.Trim() == "{") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 5:
                        if (strLine.Trim() == "}") {
                            listDest.Add(strLine);
                            iSection = -1;  // finished
                        } else if (strLine.Trim().StartsWith("\"") && strLine.Contains(':')) {
                            int p = strLine.IndexOf(':');
                            string strKey = strLine.Substring(p + 1, strLine.Length - p - 2);
                            if (listKnownKeys.Contains(strKey)) {
                                Console.WriteLine("Accepted key " + strKey);
                                bAccept = true;
                                listDest.Add(strLine);
                            } else {
                                Console.WriteLine("Invalid key " + strKey + " removed");
                                bAccept = false;
                                bNeedFix = true;
                            }
                        } else if (strLine.Trim() == "{") {
                            if (bAccept) {
                                listDest.Add(strLine);
                            }
                            iSection++;
                        } else {
                            listDest.Add(strLine);
                        }
                        break;

                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        if (strLine.Trim() == "{") {
                            iSection++;
                        } else if (strLine.Trim() == "}") {
                            iSection--;
                        }
                        if (bAccept) {
                            listDest.Add(strLine);
                        }
                        break;

                    case 10:
                        throw new Exception("File structure depth exceeded!");

                    default:
                        listDest.Add(strLine);
                        break;
                }
            }

            if (bNeedFix) {
                File.Copy(args[0], args[0] + ".bak", true);
                File.WriteAllLines(args[0], listDest);
                Console.WriteLine("File " + args[0] + " has been fixed!");
            } else {
                Console.WriteLine("File " + args[0] + " did not need fix!");
            }

        } catch (Exception e) {
            Console.WriteLine(e.ToString());
        }
    }
}

3

Tôi đã xoay sở để giải quyết vấn đề này bằng cách xóa dự án trình cài đặt khỏi giải pháp, sau đó thêm lại dự án hiện có vào lại.


Làm việc cho tôi quá. Cảm ơn.
DTdev

1

Khởi động lại VS2010 không hiệu quả với tôi nhưng tôi đã quản lý để mọi thứ hoạt động bằng cách thực hiện 'Giải pháp sạch', sau đó là 'Giải pháp xây dựng'. Tuy nhiên, thử 'Giải pháp xây dựng lại' sau khi dọn dẹp không hoạt động. Sau đó, tôi có thể chạy Giải pháp với F5 như bình thường.


1

Khi tôi gặp lỗi này, tôi thấy dự án triển khai VS2010 (.vdproj) của mình bị 'hỏng'. Cụ thể, các mục trong phần FILE của tệp VDPROJ có GUID bị thiếu trong phần HIERARCHY của tệp VDPROJ. Điều này được mô tả chi tiết dưới đây.

1) Các dự án triển khai VS2010 bao gồm các phần sau:

"Hierarchy"
{
}
"Deployable"
{
    "File"
    {
    }
} 

2) Phần HIERARCHY chứa các HƯỚNG DẪN cho từng mục (ví dụ: tệp) được thêm vào dự án triển khai. Ngoài ra, mỗi tệp được thêm vào dự án sẽ xuất hiện dưới dạng một mục trong phần CÓ THỂ GỬI> TỆP . Ví dụ sau đây cho thấy một cấu hình bình thường cho tệp msimg32.dll . Lưu ý GUID phù hợp (tức là _1C15DB39774F7E79C84F1CC87ECFD60A) trong phần HIERARCHYFILE .

"Hierarchy"
{
  "Entry"
    {
    "MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
    "OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
    "MsmSig" = "8:_UNDEFINED"
    }
  }
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

3) Các dự án triển khai VS2010 của tôi có thể bị hỏng theo hai cách:

  • a) Một mục trong phần FILE được sao chép và mục được sao chép được cung cấp một HƯỚNG DẪN không xuất hiện trong phần HIERARCHY .

  • b) GUID được liên kết với một mục trong phần FILE đã bị xóa khỏi phần HIERARCHY (tức là mục trong phần FILE không có).

3a) Ví dụ về vấn đề đầu tiên - mục trùng lặp trong phần FILE :

Trong ví dụ này, tệp msimg32.dll có hai mục nhập trong phần FILE . Mục đầu tiên (tức là đúng) có GUID phù hợp (tức là _1C15DB39774F7E79C84F1CC87ECFD60A) trong phần HIERARCHY , nhưng GUID cho mục thứ hai (tức là lỗi) (tức là 2DDC4FA12BFD46DEAED0053D23331348) không xuất hiện trong phần HIERARCHY .

"Hierarchy"
{
    "Entry"
    {
    "MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
    "OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
    "MsmSig" = "8:_UNDEFINED"
    }
}
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2DDC4FA12BFD46DEAED0053D23331348"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

3b) Ví dụ về vấn đề thứ hai - mục mồ côi trong phần FILE :

Trong ví dụ này, tệp msimg32.dll có một mục nhập trong phần FILE . Nhưng GUID được liên kết với mục nhập này (tức là A515046ADA6244F2A260E67625E4398F) không có mục nhập phù hợp trong (tức là nó bị thiếu trong) phần HIERARCHY .

"Hierarchy"
{
}
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A515046ADA6244F2A260E67625E4398F"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

4) Giải pháp: Đối với cả hai vấn đề được minh họa ở trên, giải pháp là xóa mục mồ côi trong phần FILE .

Ví dụ sau đây cho thấy cách phần FILE trong điểm 3a ở trên sẽ xuất hiện sau khi mục nhập thứ hai cho msimg32.dll đã bị xóa.

"Hierarchy"
{
    "Entry"
    {
    "MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
    "OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
    "MsmSig" = "8:_UNDEFINED"
    }
}
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

5) Tôi thấy các mục nhập bị hỏng trong VDPROJ chỉ xảy ra cho:

  • a) các tệp hợp ngữ (tức là DLL) từ các dự án C # của tôi và
  • b) các phụ thuộc được phát hiện từ các dự án C ++ của tôi (ví dụ: version.dll, urlmon.dll)

0

Dưới đây là một số giải pháp hoạt động:

1) Xóa một trong các tệp DLL có vấn đề khỏi dự án thiết lập, sau đó chỉ thêm lại tệp đó đã giải quyết được sự cố cho tôi. Điều này hoạt động ngay cả khi có nhiều tệp DLL gặp sự cố. Chỉ xóa và thêm một trong số chúng đã kích hoạt VS2010 để sửa chữa tất cả bằng cách nào đó.

2) Xây dựng lại giải pháp, sau đó thử cập nhật lại các phần phụ thuộc. Việc xây dựng lại giúp studio trực quan phát hiện ra những phụ thuộc là gì, bởi vì nó có thể đang vật lộn để tìm ra những phụ thuộc mà không có gì được xây dựng.

3) Khởi động lại Visual Studio

Hotfix VS2010 được liên kết ở trên không hoạt động với tôi. Đôi khi khởi động lại VS2010 sẽ khắc phục được sự cố và khi điều đó không hoạt động, thực hiện các bước trên sẽ hoạt động.


0

Điều này cũng có thể xảy ra khi bạn đang cố gắng gỡ lỗi và đã chọn chế độ Phát hành. Có tôi vừa rồi :(


0

Tôi muốn nói thêm rằng tôi gặp lỗi tương tự khi chỉnh sửa dự án triển khai từ máy tính của mình thay vì máy tính biên dịch chuyên dụng.

Lần cuối cùng tôi gặp lỗi đó, tôi cần khôi phục các thay đổi cuối cùng và thực hiện lại từ máy tính biên dịch chuyên dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.