"Tidak dapat memperbarui dependensi proyek" setelah melakukan Subversion

87

Saya memiliki proyek penyiapan di .NET. Ketika saya menyimpan proyek dan proyek lain ke subversi, proyek penataan tidak lagi dikompilasi. Saya mendapatkan pesan kesalahan "Tidak dapat memperbarui ketergantungan proyek."

Jason N. Gaylord
sumber

Jawaban:

50

Ada utas diskusi panjang tentang ini di MSDN. Sepertinya ada banyak kemungkinan penyebabnya. Diskusi tersebut menyertakan beberapa tautan untuk masalah ini dari Microsoft. Berikut adalah perbaikan terbaru untuk VS2005 dan berikut adalah solusi untuk VS2010.

msergeant
sumber
21
Pendekatan "hapus dan kemudian tambahkan proyek lagi" berfungsi untuk saya.
Mike Fuchs
1
+1 Saya harus memperbaiki jalur ketergantungan secara manual di file .VDPROJ. Lihat jawaban saya untuk kemungkinan menang suatu saat. Perbaikan terbaru tidak membantu sama sekali.
Marc
9
1 ke radbyx. Komentar sederhana Anda mungkin menyelamatkan saya dari satu jam frustrasi :)
JOpuckman
4
Memulai ulang juga memperbaikinya untuk saya. Terima kasih radbyx!
Josh Lowry
Menutup solusinya, lalu membukanya kembali. Ini berhasil untuk saya :-)
FIV
93

Menutup VS2010 dan membukanya kembali selalu berhasil untuk saya :)

Chuck Claunch
sumber
4
Anda tuan, luar biasa.
Panda Pajama
3
Fakta bahwa saya mencari masalah ini di Google, datang ke sini dan melihat bahwa saya telah memberi suara positif jawaban ini memberi tahu saya bahwa ini mungkin akan berhasil untuk saya. Dan itu berhasil.
jcollum
1
Anda tuan, luar biasa sekali lagi!
Panda Pajama
32

Saya memiliki masalah yang sama, tetapi tidak ada resolusi yang disebutkan yang tampaknya berhasil untuk saya. Membangun kembali proyek pengaturan akan berhasil, tetapi itu menyakitkan, karena kami menyertakan keluaran proyek dari 30+ proyek.

Hal yang menurut saya berhasil adalah pendekatan yang sangat mirip dengan apa yang dilakukan @Marc.

  1. Saya mencatat ketergantungan mana yang dilaporkan oleh Visual Studio sebagai kesalahan
  2. Edit file .vdproj di Notepad ++
  3. Cari .dll yang memberikan masalah. Anda akan melihat bagian "ScatterAssemblies". Jika kosong, hapus seluruh referensi dll
  4. Menyimpan file

Dalam semua kasus, saya memiliki banyak referensi ke dll yang sama (tidak yakin bagaimana ini terjadi)

Contoh referensi yang benar:

"{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:"
}

Contoh referensi yang salah:

"{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:"
}

Saya juga mendapat peringatan yang sama "Dua atau lebih objek memiliki lokasi target yang sama ('[targetdir] \ MyAssembly.dll')" peringatan bahwa @Marc mendapat ... tetapi proyek penataan mengkompilasi dan berjalan dengan baik.

Jabezz
sumber
2
Saya akhirnya menghapus semua Filereferensi perakitan. Bekerja dengan sempurna.
MartinHN
Ini, berkali-kali. Saya telah merobek rambut saya untuk menyelesaikan kesalahan ini, dan tidak ada perbaikan lain yang disarankan yang berhasil.
John Källén
Ini bekerja untuk saya ketika menghapus seluruh konten bagian File tidak.
alan
10

Tautan yang benar untuk hot-fix untuk VS2010 adalah:

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

Bekerja dengan baik setelah instalasi

Pranav Singh
sumber
1
Ini berhasil untuk saya. Memulai ulang VS dan mengedit .vdproj tidak.
Colin Pickard
Microsoft Connect telah dihentikan dan tautan di atas membawa kita ke halaman yang tidak mau repot-repot memberi tahu di mana hotfix ini sekarang berada.
dotNET
6

Saya memiliki masalah serupa dan menemukan perbaikan dalam diskusi yang sangat lama dan lama tentang MSDN ini .
Seperti yang dijawab oleh pengguna 'Jeff Hunsaker' pada Kamis, 26 Agustus 2010 17:51 (tautan langsung tidak memungkinkan):

Saya baru saja menemukan ini ketika memutakhirkan Visual Studio 2008 Deployment Projects ke VS 2010. Solusi Hans (di atas) bekerja untuk saya.

  1. Edit file .vdproj di Notepad.
  2. Telusuri "SourcePath" = "8:
  3. Untuk setiap perakitan / dll, berikan jalur lengkap
  4. Menyimpan file

Dalam file .vdproj saya, saya memiliki beberapa entri yang merujuk ke assembly:
"SourcePath" = "8: MyAssembly.DLL"

Meskipun Visual Studio [entah bagaimana] mengetahui lokasi file, saya menerima kesalahan "Tidak dapat memperbarui dependensi proyek" hingga saya memberikan jalur lengkap:

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

Salam,

Jeff ...

Saya mencatat ketergantungan mana yang dilaporkan oleh Visual Studio dan menulis skrip untuk memperbaikinya jika ini diperlukan.

Perhatikan bahwa ini sekarang memberi saya peringatan "Dua atau lebih objek memiliki lokasi target yang sama ('[targetdir] \ MyAssembly.dll'). Tapi saya bisa hidup dengan itu.

Marc
sumber
4

Ini memecahkan masalah yang sama untuk saya: Saya menambahkan majelis yang disebutkan dalam pesan kesalahan ke GAC. Ketika saya mengkompilasi ulang proyek, dll muncul di bawah "Ketergantungan Terdeteksi" di Solution Explorer dan saya mendapat kesalahan yang sama. Kemudian saya mengecualikan dll (klik kanan dan pilih Kecualikan) dan proyek akhirnya dikompilasi dengan baik.

Arne
sumber
3

Masalahnya mungkin disebabkan oleh file yatim piatu di bagian "Dapat diterapkan" -> "File" dari file .vdproj. Anda dapat memverifikasi ini dengan menghapus semua file dari proyek penataan di Visual Studio (membuat cadangan terlebih dahulu). Jika Anda membuka file .vdproj dengan editor teks dan masih melihat entri di bagian "File", Anda mengalami masalah ini. Anda dapat mencatat kunci dari file-file ini dan menghapusnya dari file .vdproj asli dan itu akan berfungsi kembali.

Alternatifnya, kompilasi program perbaikan cepat ini (hanya diuji dengan 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());
        }
    }
}
percaya diri
sumber
3

Saya berhasil mengatasi masalah ini dengan menghapus proyek penginstal dari solusi kemudian menambahkan kembali proyek yang ada.

Puncak
sumber
Bekerja untuk saya juga. Terima kasih.
DTdev
1

Memulai ulang VS2010 tidak berhasil untuk saya, tetapi saya berhasil membuat semuanya berfungsi dengan melakukan 'Solusi Bersih', lalu 'Solusi Bangun'. Namun, mencoba 'Rebuild Solution' setelah pembersihan tidak berhasil. Kemudian saya dapat menjalankan Solusi dengan F5 seperti biasa.

Mr Chops
sumber
1

Ketika saya mendapatkan kesalahan ini, saya menemukan proyek penyebaran VS2010 saya (.vdproj) 'rusak'. Secara khusus, item di bagian FILE dari file VDPROJ memiliki GUID yang hilang dari bagian HIERARCHY dari file VDPROJ. Ini dijelaskan secara rinci di bawah.

1) Proyek penyebaran VS2010 mencakup bagian berikut:

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

2) Bagian HIERARCHY berisi GUID untuk setiap item (misalnya file) yang ditambahkan ke proyek penerapan. Selain itu, setiap file yang ditambahkan ke proyek muncul sebagai item di bawah bagian DEPLOYABLE> FILE . Contoh berikut menunjukkan konfigurasi normal untuk file msimg32.dll . Perhatikan GUID yang cocok (yaitu _1C15DB39774F7E79C84F1CC87ECFD60A) di bagian HIERARCHY dan FILE .

"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) Proyek penyebaran VS2010 saya dapat rusak dalam dua cara:

  • a) Item di bagian FILE digandakan dan item yang digandakan diberi GUID yang tidak muncul di bagian HIERARCHY .

  • b) GUID yang terkait dengan item di bagian FILE telah dihapus dari bagian HIERARCHY (yaitu, item di bagian FILE menjadi yatim piatu).

3a) Contoh masalah pertama - item duplikat di bagian FILE :

Dalam contoh ini, file msimg32.dll memiliki dua entri di bagian FILE . Entri pertama (yaitu benar) memiliki GUID yang cocok (yaitu _1C15DB39774F7E79C84F1CC87ECFD60A) di bagian HIERARCHY , tetapi GUID untuk entri kedua (yaitu kesalahan) (yaitu 2DDC4FA12BFD46DEAED0053D23331348) tidak muncul di bagian 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) Contoh masalah kedua - item yatim piatu di bagian FILE :

Dalam contoh ini, file msimg32.dll memiliki entri di bagian FILE . Tetapi GUID yang terkait dengan entri ini (yaitu A515046ADA6244F2A260E67625E4398F) tidak memiliki entri yang cocok di (yaitu hilang dari) bagian HIERARCHY .

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

4) Solusi: Untuk kedua masalah yang diilustrasikan di atas, solusinya adalah menghapus item yatim piatu di bagian FILE .

Contoh berikut menunjukkan bagaimana bagian FILE pada poin 3a di atas akan muncul setelah entri kedua untuk msimg32.dll telah dihapus.

"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) Saya menemukan entri yang rusak di VDPROJ hanya terjadi untuk:

  • a) file assembly (yaitu DLL) dari proyek C # saya dan
  • b) mendeteksi ketergantungan dari proyek C ++ saya (misalnya version.dll, urlmon.dll)
Ian Bell
sumber
0

Berikut beberapa solusi yang berhasil:

1) Menghapus salah satu masalah DLL dari proyek penataan, dan kemudian menambahkan kembali hanya yang satu itu menyelesaikan masalah bagi saya. Ini bekerja bahkan ketika ada banyak DLL yang bermasalah. Menghapus dan menambahkan hanya satu dari mereka memicu VS2010 untuk memperbaiki semuanya.

2) Bangun kembali solusi, lalu coba perbarui dependensi lagi. Membangun kembali membantu studio visual menemukan apa itu dependensi, karena mungkin kesulitan menemukan dependensi tanpa ada yang dibangun.

3) Mulai ulang Visual Studio

Perbaikan terbaru VS2010 yang ditautkan di atas tidak berfungsi untuk saya. Terkadang memulai ulang VS2010 akan memperbaiki masalah dan ketika itu tidak berhasil, melakukan hal di atas berfungsi.

Leigh McCulloch
sumber
0

Ini juga bisa terjadi saat Anda mencoba men-debug dan memilih mode Rilis. Punya saya sekarang :(

Richard N
sumber
0

Saya ingin menambahkan, bahwa saya mendapatkan kesalahan yang sama ketika saya mengedit proyek penerapan dari komputer saya, bukan dari komputer kompilator khusus.

Terakhir kali saya mendapatkan kesalahan itu, saya perlu memutar kembali perubahan terakhir, dan melakukannya kembali dari komputer kompilator khusus.

Hugo
sumber