ฉันมีโครงการติดตั้งใน. NET เมื่อฉันบันทึกโครงการและโครงการอื่น ๆ เพื่อโค่นล้มโครงการตั้งค่าจะไม่รวบรวมอีกต่อไป ฉันได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงของโครงการ"
ฉันมีโครงการติดตั้งใน. NET เมื่อฉันบันทึกโครงการและโครงการอื่น ๆ เพื่อโค่นล้มโครงการตั้งค่าจะไม่รวบรวมอีกต่อไป ฉันได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงของโครงการ"
คำตอบ:
มีกระทู้สนทนาเกี่ยวกับเรื่องนี้ใน MSDN ดูเหมือนมีหลายสาเหตุที่เป็นไปได้ การสนทนามีลิงก์บางส่วนสำหรับปัญหานี้จาก Microsoft นี่คือโปรแกรมแก้ไขด่วนสำหรับ VS2005 และนี่คือวิธีแก้ปัญหาสำหรับ VS2010
การปิด VS2010 แล้วเปิดใหม่ใช้ได้ผลดีเสมอ :)
ฉันมีปัญหาเดียวกัน แต่ดูเหมือนว่าไม่มีการแก้ปัญหาใด ๆ ที่ได้ผลสำหรับฉัน การสร้างโครงการติดตั้งใหม่จะใช้งานได้ แต่เป็นความเจ็บปวดเนื่องจากเรารวมเอาท์พุทของโครงการมากกว่า 30 โครงการ
สิ่งที่ฉันพบว่าได้ผลคือแนวทางที่คล้ายกันมากกับสิ่งที่ @Marc ทำ
ในทุกกรณีฉันมีการอ้างอิงหลายครั้งไปยัง dll เดียวกัน (ไม่แน่ใจว่าเกิดขึ้นได้อย่างไร)
ตัวอย่างการอ้างอิงที่ถูกต้อง:
"{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:"
}
ตัวอย่างการอ้างอิงที่ไม่ถูกต้อง:
"{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:"
}
ฉันยังได้รับเหมือนกัน "วัตถุสองชิ้นขึ้นไปมีตำแหน่งเป้าหมายเดียวกัน ('[targetdir] \ MyAssembly.dll')" เตือนว่า @Marc ได้ ... แต่โครงการติดตั้งรวบรวมและทำงานได้ดี
File
อ้างอิงการประกอบทั้งหมด ทำงานได้อย่างสมบูรณ์แบบ
ลิงค์ที่ถูกต้องสำหรับ hot-fix สำหรับ VS2010 คือ:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
ใช้งานได้ดีหลังการติดตั้ง
ผมมีปัญหาที่คล้ายกันและพบว่าการแก้ไขในเรื่องนี้นานมากและการอภิปรายเก่าบนMSDN
ตามที่ผู้ใช้ 'Jeff Hunsaker' เมื่อวันพฤหัสบดีที่ 26 สิงหาคม 2010 17:51 น. ตอบ (ลิงก์โดยตรงไม่ได้):
ฉันเพิ่งพบสิ่งนี้เมื่ออัปเกรด Visual Studio 2008 Deployment Projects เป็น VS 2010 โซลูชันของ Hans (ด้านบน) ใช้ได้ผลสำหรับฉัน
- แก้ไขไฟล์. vdproj ใน Notepad
- ค้นหา "SourcePath" = "8:
- สำหรับแต่ละแอสเซมบลี / dll ให้ระบุพา ธ แบบเต็ม
- บันทึกไฟล์
ภายในไฟล์. vdproj ของฉันฉันมีหลายรายการที่อ้างถึงแอสเซมบลี:
"SourcePath" = "8: MyAssembly.DLL"แม้ว่า Visual Studio [อย่างใด] จะรู้ตำแหน่งไฟล์ แต่ฉันได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงของโครงการ" จนกว่าฉันจะระบุเส้นทางแบบเต็ม:
"SourcePath" = "8: .. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL"
ความนับถือ,
เจฟ ...
ฉันสังเกตว่า Visual Studio รายงานการอ้างอิงใดและเขียนสคริปต์เพื่อแก้ไขในกรณีที่จำเป็น
โปรดทราบว่าตอนนี้ทำให้ฉันมีคำเตือน "วัตถุสองชิ้นขึ้นไปมีตำแหน่งเป้าหมายเดียวกัน ('[targetdir] \ MyAssembly.dll') แต่ฉันสามารถอยู่กับสิ่งนั้นได้
วิธีนี้แก้ปัญหาเดียวกันสำหรับฉัน: ฉันเพิ่มชุดประกอบที่กล่าวถึงในข้อความแสดงข้อผิดพลาดไปยัง GAC เมื่อฉันคอมไพล์โครงการใหม่ dll ปรากฏภายใต้ "การพึ่งพาที่ตรวจพบ" ใน Solution Explorer และฉันได้รับข้อผิดพลาดเดียวกัน จากนั้นฉันไม่รวม dll (คลิกขวาและเลือกไม่รวม) และในที่สุดโครงการก็รวบรวมได้
ปัญหาอาจเกิดจากไฟล์ที่ไม่มีที่มาในส่วน "Deployable" -> "File" ของไฟล์. vdproj คุณสามารถตรวจสอบได้โดยการลบไฟล์ทั้งหมดออกจากโครงการติดตั้งใน Visual Studio (สำรองข้อมูลก่อน) หากคุณเปิดไฟล์. vdproj ด้วยโปรแกรมแก้ไขข้อความและยังคงเห็นรายการในส่วน "ไฟล์" แสดงว่าคุณมีปัญหานี้ คุณสามารถจดคีย์ของไฟล์เหล่านี้และลบออกจากไฟล์. vdproj ดั้งเดิมและควรใช้งานได้อีกครั้ง
หรือรวบรวมโปรแกรมแก้ไขด่วนนี้ (ทดสอบกับ 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());
}
}
}
ฉันจัดการเพื่อแก้ไขปัญหานี้โดยการลบโครงการตัวติดตั้งออกจากโซลูชันจากนั้นเพิ่มโครงการที่มีอยู่กลับเข้าไปอีกครั้ง
การรีสตาร์ท VS2010 ไม่ได้ผลสำหรับฉัน แต่ฉันจัดการเพื่อให้ทุกอย่างทำงานได้โดยทำ 'Clean Solution' จากนั้น 'สร้างโซลูชัน' ลอง 'สร้างโซลูชันใหม่' หลังจากการทำความสะอาดไม่ได้ผล จากนั้นฉันสามารถเรียกใช้โซลูชันด้วย F5 ได้ตามปกติ
เมื่อฉันได้รับข้อผิดพลาดนี้ฉันพบว่าโครงการปรับใช้ VS2010 (.vdproj) ของฉัน 'เสียหาย' โดยเฉพาะรายการในส่วนFILEของไฟล์ VDPROJ มี GUID ที่หายไปจากส่วนHIERARCHYของไฟล์ VDPROJ นี่คือรายละเอียดด้านล่าง
1) โครงการปรับใช้ VS2010 ประกอบด้วยส่วนต่อไปนี้:
"Hierarchy"
{
}
"Deployable"
{
"File"
{
}
}
2) ส่วนHIERARCHYมี GUID สำหรับแต่ละรายการ (เช่นไฟล์) ที่เพิ่มในโครงการปรับใช้ นอกจากนี้ในแต่ละไฟล์เพิ่มเข้าไปในโครงการจะปรากฏเป็นรายการภายใต้ที่deployable> FILEส่วน ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการกำหนดค่าปกติสำหรับไฟล์msimg32.dll หมายเหตุ GUID จับคู่ (เช่น _1C15DB39774F7E79C84F1CC87ECFD60A) ในลำดับชั้นและไฟล์ส่วน
"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) โครงการปรับใช้ VS2010 ของฉันอาจเสียหายได้สองวิธี:
a) รายการในส่วนFILEซ้ำกันและรายการที่ซ้ำกันจะได้รับ GUID ซึ่งไม่ปรากฏในส่วนHIERARCHY
b) GUID ที่เชื่อมโยงกับไอเท็มในส่วนFILEถูกลบออกจากส่วนHIERARCHY (กล่าวคือไอเท็มในส่วนFILEนั้นไม่ถูกละเลย)
3a) ตัวอย่างของปัญหาแรก - รายการที่ซ้ำกันในส่วนFILE :
ในตัวอย่างนี้ไฟล์msimg32.dllมีสองรายการในส่วนFILE รายการแรก (เช่นถูกต้อง) มี GUID ที่ตรงกัน (เช่น _1C15DB39774F7E79C84F1CC87ECFD60A) ในส่วนHIERARCHYแต่ GUID สำหรับรายการที่สอง (เช่นข้อผิดพลาด) (เช่น 2DDC4FA12BFD46DEAED0053D23331348) ไม่ปรากฏในส่วน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) ตัวอย่างของปัญหาที่สอง - รายการที่ถูกทอดทิ้งในส่วนFILE :
ในตัวอย่างนี้ไฟล์msimg32.dllมีรายการในส่วนFILE แต่ GUID ที่เชื่อมโยงกับรายการนี้ (เช่น A515046ADA6244F2A260E67625E4398F) ไม่มีรายการที่ตรงกันใน (กล่าวคือไม่มีจาก) ส่วนHIERARCHY
"Hierarchy"
{
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A515046ADA6244F2A260E67625E4398F"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
4) วิธีแก้ไข: สำหรับปัญหาทั้งสองที่แสดงไว้ข้างต้นวิธีแก้ไขคือการลบรายการที่ไม่มีเจ้าของในส่วน FILE
ตัวอย่างต่อไปนี้แสดงให้เห็นว่าส่วนFILEในจุด 3a ด้านบนจะปรากฏอย่างไรหลังจากลบรายการที่สองสำหรับmsimg32.dll
"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) ฉันพบว่ารายการที่เสียหายใน VDPROJ เกิดขึ้นสำหรับ:
วิธีแก้ปัญหาสองสามวิธีที่ใช้ได้ผล:
1) การลบหนึ่งใน DLL ที่มีปัญหาออกจากโปรเจ็กต์การตั้งค่าจากนั้นเพิ่มอีกครั้งเพียงอันเดียวก็ช่วยแก้ปัญหาให้ฉันได้ สิ่งนี้ใช้ได้ผลแม้ว่าจะมี DLL หลายตัวที่มีปัญหา การลบและเพิ่มเพียงหนึ่งในนั้นเรียกใช้ VS2010 เพื่อแก้ไขปัญหาทั้งหมด
2) สร้างโซลูชันใหม่จากนั้นลองอัปเดตการอ้างอิงอีกครั้ง การสร้างใหม่ช่วยให้สตูดิโอภาพค้นพบว่าการอ้างอิงคืออะไรเนื่องจากอาจต้องดิ้นรนเพื่อค้นหาการอ้างอิงโดยไม่มีอะไรสร้างขึ้น
3) รีสตาร์ท Visual Studio
โปรแกรมแก้ไขด่วน VS2010 ที่เชื่อมโยงด้านบนไม่ได้ผลสำหรับฉัน บางครั้งการรีสตาร์ท VS2010 จะช่วยแก้ไขปัญหาได้และเมื่อไม่ได้ผลการดำเนินการข้างต้นจะได้ผล
นอกจากนี้ยังสามารถเกิดขึ้นได้เมื่อคุณพยายามแก้ไขข้อบกพร่องและเลือกโหมดเผยแพร่ มีฉันตอนนี้ :(
ฉันต้องการเพิ่มว่าฉันได้รับข้อผิดพลาดเดียวกันเมื่อฉันแก้ไขโครงการปรับใช้จากคอมพิวเตอร์ของฉันแทนที่จะเป็นคอมพิวเตอร์คอมไพเลอร์เฉพาะ
ครั้งสุดท้ายที่ฉันได้รับข้อผิดพลาดนั้นฉันจำเป็นต้องย้อนกลับการเปลี่ยนแปลงล่าสุดและทำใหม่จากคอมพิวเตอร์คอมไพเลอร์เฉพาะ