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."
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."
Jawaban:
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.
Menutup VS2010 dan membukanya kembali selalu berhasil untuk saya :)
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.
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.
File
referensi perakitan. Bekerja dengan sempurna.
Tautan yang benar untuk hot-fix untuk VS2010 adalah:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
Bekerja dengan baik setelah instalasi
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.
- Edit file .vdproj di Notepad.
- Telusuri "SourcePath" = "8:
- Untuk setiap perakitan / dll, berikan jalur lengkap
- 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.
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.
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());
}
}
}
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.
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:
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.
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.