“ ไม่สามารถอัปเดตการอ้างอิงของโครงการได้” หลังจากกระทำการโค่นล้ม


87

ฉันมีโครงการติดตั้งใน. NET เมื่อฉันบันทึกโครงการและโครงการอื่น ๆ เพื่อโค่นล้มโครงการตั้งค่าจะไม่รวบรวมอีกต่อไป ฉันได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงของโครงการ"

คำตอบ:


50

มีกระทู้สนทนาเกี่ยวกับเรื่องนี้ใน MSDN ดูเหมือนมีหลายสาเหตุที่เป็นไปได้ การสนทนามีลิงก์บางส่วนสำหรับปัญหานี้จาก Microsoft นี่คือโปรแกรมแก้ไขด่วนสำหรับ VS2005 และนี่คือวิธีแก้ปัญหาสำหรับ VS2010


21
วิธี "ลบแล้วเพิ่มโครงการอีกครั้ง" ใช้ได้ผลสำหรับฉัน
Mike Fuchs

1
+1 ฉันต้องแก้ไขเส้นทางการอ้างอิงด้วยตนเองในไฟล์. VDPROJ ดูคำตอบของฉันที่อาจชนะบางครั้ง โปรแกรมแก้ไขด่วนไม่ได้ช่วยเลย
Marc

9
+1 ถึง radbyx ความคิดเห็นง่ายๆของคุณอาจช่วยให้ฉันหงุดหงิดได้หนึ่งชั่วโมง :)
JOpuckman

4
การรีสตาร์ทยังแก้ไขให้ฉัน ขอบคุณ radbyx!
Josh Lowry

ปิดโซลูชันแล้วเปิดใหม่ สิ่งนี้ใช้ได้ผลสำหรับฉัน :-)
FIV

93

การปิด VS2010 แล้วเปิดใหม่ใช้ได้ผลดีเสมอ :)


4
คุณชายสุดยอดมาก
Panda Pajama

3
ความจริงที่ว่าฉัน googled ปัญหานี้มาที่นี่และเห็นว่าฉันได้เพิ่มคะแนนคำตอบนี้แล้วบอกฉันว่านี่อาจจะใช้ได้ผลสำหรับฉัน และมันก็ทำ
jcollum

1
คุณชายสุดยอดอีกครั้ง!
Panda Pajama

32

ฉันมีปัญหาเดียวกัน แต่ดูเหมือนว่าไม่มีการแก้ปัญหาใด ๆ ที่ได้ผลสำหรับฉัน การสร้างโครงการติดตั้งใหม่จะใช้งานได้ แต่เป็นความเจ็บปวดเนื่องจากเรารวมเอาท์พุทของโครงการมากกว่า 30 โครงการ

สิ่งที่ฉันพบว่าได้ผลคือแนวทางที่คล้ายกันมากกับสิ่งที่ @Marc ทำ

  1. ฉันสังเกตว่า Visual Studio รายงานการอ้างอิงใดเป็นข้อผิดพลาด
  2. แก้ไขไฟล์. vdproj ใน Notepad ++
  3. ค้นหา. dll ที่เป็นปัญหา คุณจะเห็นส่วน "ScatterAssemblies" ถ้าว่างให้ลบการอ้างอิง dll ทั้งหมด
  4. บันทึกไฟล์

ในทุกกรณีฉันมีการอ้างอิงหลายครั้งไปยัง 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 ได้ ... แต่โครงการติดตั้งรวบรวมและทำงานได้ดี


2
ฉันจบลงด้วยการลบการFileอ้างอิงการประกอบทั้งหมด ทำงานได้อย่างสมบูรณ์แบบ
MartinHN

นี้หลาย ๆ ครั้ง ฉันฉีกขนของฉันออกเพื่อแก้ไขข้อผิดพลาดเหล่านี้และไม่มีการแก้ไขอื่น ๆ ที่แนะนำว่าได้ผล
John Källén

สิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อลบเนื้อหาส่วนไฟล์ทั้งหมดไม่ได้
อลัน

10

ลิงค์ที่ถูกต้องสำหรับ hot-fix สำหรับ VS2010 คือ:

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

ใช้งานได้ดีหลังการติดตั้ง


1
สิ่งนี้ได้ผลสำหรับฉัน การรีสตาร์ท VS และการแก้ไข. vdproj ไม่ได้
Colin Pickard

Microsoft Connect ถูกยกเลิกการใช้งานแล้วและลิงก์ด้านบนจะพาเราไปยังหน้าที่ไม่ต้องกังวลว่าตอนนี้โปรแกรมแก้ไขด่วนนี้อยู่ที่ไหน
dotNET

6

ผมมีปัญหาที่คล้ายกันและพบว่าการแก้ไขในเรื่องนี้นานมากและการอภิปรายเก่าบนMSDN
ตามที่ผู้ใช้ 'Jeff Hunsaker' เมื่อวันพฤหัสบดีที่ 26 สิงหาคม 2010 17:51 น. ตอบ (ลิงก์โดยตรงไม่ได้):

ฉันเพิ่งพบสิ่งนี้เมื่ออัปเกรด Visual Studio 2008 Deployment Projects เป็น VS 2010 โซลูชันของ Hans (ด้านบน) ใช้ได้ผลสำหรับฉัน

  1. แก้ไขไฟล์. vdproj ใน Notepad
  2. ค้นหา "SourcePath" = "8:
  3. สำหรับแต่ละแอสเซมบลี / dll ให้ระบุพา ธ แบบเต็ม
  4. บันทึกไฟล์

ภายในไฟล์. vdproj ของฉันฉันมีหลายรายการที่อ้างถึงแอสเซมบลี:
"SourcePath" = "8: MyAssembly.DLL"

แม้ว่า Visual Studio [อย่างใด] จะรู้ตำแหน่งไฟล์ แต่ฉันได้รับข้อผิดพลาด "ไม่สามารถอัปเดตการอ้างอิงของโครงการ" จนกว่าฉันจะระบุเส้นทางแบบเต็ม:

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

ความนับถือ,

เจฟ ...

ฉันสังเกตว่า Visual Studio รายงานการอ้างอิงใดและเขียนสคริปต์เพื่อแก้ไขในกรณีที่จำเป็น

โปรดทราบว่าตอนนี้ทำให้ฉันมีคำเตือน "วัตถุสองชิ้นขึ้นไปมีตำแหน่งเป้าหมายเดียวกัน ('[targetdir] \ MyAssembly.dll') แต่ฉันสามารถอยู่กับสิ่งนั้นได้


4

วิธีนี้แก้ปัญหาเดียวกันสำหรับฉัน: ฉันเพิ่มชุดประกอบที่กล่าวถึงในข้อความแสดงข้อผิดพลาดไปยัง GAC เมื่อฉันคอมไพล์โครงการใหม่ dll ปรากฏภายใต้ "การพึ่งพาที่ตรวจพบ" ใน Solution Explorer และฉันได้รับข้อผิดพลาดเดียวกัน จากนั้นฉันไม่รวม dll (คลิกขวาและเลือกไม่รวม) และในที่สุดโครงการก็รวบรวมได้


3

ปัญหาอาจเกิดจากไฟล์ที่ไม่มีที่มาในส่วน "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());
        }
    }
}

3

ฉันจัดการเพื่อแก้ไขปัญหานี้โดยการลบโครงการตัวติดตั้งออกจากโซลูชันจากนั้นเพิ่มโครงการที่มีอยู่กลับเข้าไปอีกครั้ง


ทำงานให้ฉันด้วย ขอบคุณ.
DTdev

1

การรีสตาร์ท VS2010 ไม่ได้ผลสำหรับฉัน แต่ฉันจัดการเพื่อให้ทุกอย่างทำงานได้โดยทำ 'Clean Solution' จากนั้น 'สร้างโซลูชัน' ลอง 'สร้างโซลูชันใหม่' หลังจากการทำความสะอาดไม่ได้ผล จากนั้นฉันสามารถเรียกใช้โซลูชันด้วย F5 ได้ตามปกติ


1

เมื่อฉันได้รับข้อผิดพลาดนี้ฉันพบว่าโครงการปรับใช้ 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 เกิดขึ้นสำหรับ:

  • a) ไฟล์ประกอบ (เช่น DLL) จากโครงการ C # ของฉันและ
  • b) ตรวจพบการอ้างอิงจากโครงการ C ++ ของฉัน (เช่น version.dll, urlmon.dll)

0

วิธีแก้ปัญหาสองสามวิธีที่ใช้ได้ผล:

1) การลบหนึ่งใน DLL ที่มีปัญหาออกจากโปรเจ็กต์การตั้งค่าจากนั้นเพิ่มอีกครั้งเพียงอันเดียวก็ช่วยแก้ปัญหาให้ฉันได้ สิ่งนี้ใช้ได้ผลแม้ว่าจะมี DLL หลายตัวที่มีปัญหา การลบและเพิ่มเพียงหนึ่งในนั้นเรียกใช้ VS2010 เพื่อแก้ไขปัญหาทั้งหมด

2) สร้างโซลูชันใหม่จากนั้นลองอัปเดตการอ้างอิงอีกครั้ง การสร้างใหม่ช่วยให้สตูดิโอภาพค้นพบว่าการอ้างอิงคืออะไรเนื่องจากอาจต้องดิ้นรนเพื่อค้นหาการอ้างอิงโดยไม่มีอะไรสร้างขึ้น

3) รีสตาร์ท Visual Studio

โปรแกรมแก้ไขด่วน VS2010 ที่เชื่อมโยงด้านบนไม่ได้ผลสำหรับฉัน บางครั้งการรีสตาร์ท VS2010 จะช่วยแก้ไขปัญหาได้และเมื่อไม่ได้ผลการดำเนินการข้างต้นจะได้ผล


0

นอกจากนี้ยังสามารถเกิดขึ้นได้เมื่อคุณพยายามแก้ไขข้อบกพร่องและเลือกโหมดเผยแพร่ มีฉันตอนนี้ :(


0

ฉันต้องการเพิ่มว่าฉันได้รับข้อผิดพลาดเดียวกันเมื่อฉันแก้ไขโครงการปรับใช้จากคอมพิวเตอร์ของฉันแทนที่จะเป็นคอมพิวเตอร์คอมไพเลอร์เฉพาะ

ครั้งสุดท้ายที่ฉันได้รับข้อผิดพลาดนั้นฉันจำเป็นต้องย้อนกลับการเปลี่ยนแปลงล่าสุดและทำใหม่จากคอมพิวเตอร์คอมไพเลอร์เฉพาะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.