"परियोजना की निर्भरता को अद्यतन करने में असमर्थ" तोड़फोड़ करने के बाद


87

मेरे पास .NET में एक सेटअप प्रोजेक्ट है। जब मैं प्रोजेक्ट और अन्य प्रोजेक्ट्स को तोड़फोड़ करने के लिए सहेजता हूं, तो सेटअप प्रोजेक्ट अब संकलित नहीं होता है। मुझे त्रुटि मिलती है "परियोजना की निर्भरता को अपडेट करने में असमर्थ।"

जवाबों:


50

MSDN पर इस बारे में एक लंबी चर्चा सूत्र है। ऐसा लगता है कि कई संभावित कारण हैं। चर्चा में Microsoft से इस समस्या के लिए कुछ लिंक शामिल हैं। यहाँ VS2005 के लिए एक हॉटफ़िक्स है और यहाँ VS2010 के लिए वर्कअराउंड है।


21
"हटाएं और फिर परियोजना को फिर से जोड़ें" दृष्टिकोण मेरे लिए काम करता है।
माइक फुक्स 15

1
+1 मुझे .VDPROJ फ़ाइल में मैन्युअल रूप से निर्भरता पथ को ठीक करना था। संभवतः कुछ समय जीतने के लिए मेरा उत्तर देखें। हॉटफिक्स बिल्कुल मदद नहीं की।
मार्क

9
मूलक को +1। आपकी सरल टिप्पणी ने शायद मुझे एक घंटे की हताशा से बचा लिया :)
जोपुकमान ने

4
फिर से शुरू करना भी मेरे लिए तय था। धन्यवाद radbyx!
जोश लोरी

समाधान बंद करना, फिर इसे खोलना। इसने मेरे लिए काम किया :-)
FIV

93

VS2010 को बंद करना और फिर इसे खोलना हमेशा मेरे लिए काम रहा है :)


4
आप सर, कमाल हैं।
पांडा पाजामा

3
तथ्य यह है कि मैंने इस समस्या को नजरअंदाज कर दिया, यहां आया और मैंने देखा कि मैंने पहले ही इस जवाब को उलट दिया था, मुझे बताया कि यह शायद मेरे लिए काम करने वाला था। और यह किया।
1

1
आप साहब, एक बार फिर कमाल कर रहे हैं!
पांडा पाजामा

32

मेरे पास एक ही मुद्दा है, लेकिन उल्लेखित प्रस्तावों में से कोई भी मेरे लिए काम नहीं कर रहा था। सेटअप प्रोजेक्ट को फिर से बनाना काम करेगा, लेकिन यह एक दर्द है, क्योंकि हम 30+ प्रोजेक्ट के प्रोजेक्ट आउटपुट शामिल करते हैं।

मुझे जो चीज़ काम करने के लिए मिली है, वह @Marc ने जो की है, उसके समान है।

  1. मैंने नोट किया कि कौन सी निर्भरताएँ विजुअल स्टूडियो द्वारा त्रुटियों के रूप में बताई गई थीं
  2. नोटपैड ++ में .vdproj फ़ाइल संपादित करें
  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विधानसभा संदर्भों को समाप्त कर दिया । पूरी तरह से काम किया।
मार्टिनएच

यह, कई बार। मैं इन त्रुटियों को हल करने के लिए अपने बालों को फाड़ रहा हूं, और सुझाए गए अन्य सुधारों में से किसी ने भी काम नहीं किया है।
जॉन कैलन

संपूर्ण फ़ाइल अनुभाग सामग्री को हटाने के दौरान मेरे लिए यह काम नहीं किया।
एलन

10

VS2010 के लिए हॉट-फिक्स के लिए सही लिंक है:

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

स्थापना के बाद ठीक काम करता है


1
इसने मेरे लिए काम किया। वीएस को फिर से शुरू करना और .vdproj को संपादित करना नहीं था।
कॉलिन पिकार्ड

Microsoft कनेक्ट सेवानिवृत्त हो गया है और ऊपर दिया गया लिंक हमें एक ऐसे पृष्ठ पर ले जाता है जो यह बताने के लिए परेशान नहीं करता है कि यह हॉटफ़िक्स अब कहाँ स्थित है।
डॉटनेट

6

मुझे इसी तरह की समस्या थी और एमएसडीएन पर इस बहुत लंबी और पुरानी चर्चा में एक सुधार मिला ।
गुरुवार, 26 अगस्त, 2010 5:51 बजे उपयोगकर्ता 'जेफ हुनसेकर' ने उत्तर दिया (सीधा लिंक संभव नहीं):

विजुअल स्टूडियो 2008 तैनाती परियोजनाओं को वीएस 2010 में अपग्रेड करते समय मुझे इसका सामना करना पड़ा। हंस '(ऊपर) समाधान ने मेरे लिए काम किया।

  1. नोटपैड में .vdproj फ़ाइल संपादित करें।
  2. "SourcePath" = "8:
  3. प्रत्येक विधानसभा / डीएल के लिए, पूर्ण पथ प्रदान करें
  4. फाइल सुरक्षित करें

मेरी .vdproj फ़ाइल के भीतर, मेरे पास विधानसभा को संदर्भित करने वाली कई प्रविष्टियाँ थीं:
"SourcePath" = "8: MyAssembly.DLL"

भले ही विज़ुअल स्टूडियो [किसी तरह] फ़ाइल स्थान को जानता था, मुझे "प्रोजेक्ट की निर्भरता को अपडेट करने में असमर्थ" त्रुटि मिली जब तक कि मैंने पूर्ण पथ प्रदान नहीं किया:

"SourcePath" = "8: .. \ _ \ _ \ build \ bin \ MyCompany.MyAssembly.DL"

सादर,

जेफ ...

मैंने नोट किया कि विजुअल स्टूडियो द्वारा कौन सी निर्भरताएं बताई गई थीं और यह आवश्यक होने पर उन्हें ठीक करने के लिए एक स्क्रिप्ट लिखी थी।

ध्यान दें कि यह अब मुझे एक चेतावनी देता है "दो या दो से अधिक वस्तुओं का एक ही लक्ष्य स्थान है ('[targetdir] \ MyAssembly.dll')। लेकिन मैं इसके साथ रह सकता हूं।


4

इससे मेरे लिए एक ही समस्या हल हो गई: मैंने उन असेंबलीज़ को जोड़ा जो त्रुटि संदेश में जीएसी के लिए उल्लेखित थीं। जब मैंने प्रोजेक्ट को recompiled किया तो dll "एक्सप्लोरर डिपेंडेंसीज़" के तहत सॉल्यूशन एक्सप्लोरर में दिखाई दिया और मुझे वही त्रुटि मिली। तब मैंने dll के (राइट-क्लिक और बहिष्कृत का चयन करें) को छोड़ दिया और परियोजना को अंत में संकलित किया।


3

समस्या "Deployable" -> .vdproj फ़ाइल के "फ़ाइल" अनुभाग में अनाथ फ़ाइलों के कारण हो सकती है। आप विजुअल स्टूडियो में सेटअप प्रोजेक्ट से सभी फ़ाइलों को हटाकर (पहले बैकअप बनाएं) इसे सत्यापित कर सकते हैं। यदि आप एक पाठ संपादक के साथ .vdproj फ़ाइल खोलते हैं और फिर भी "फ़ाइल" अनुभाग में प्रविष्टियाँ देखते हैं तो आपको यह समस्या होगी। आप इन फ़ाइलों की कुंजियों को नोट कर सकते हैं और उन्हें मूल .vdproj फ़ाइल से निकाल सकते हैं और इसे फिर से काम करना चाहिए।

वैकल्पिक रूप से इस क्विक फिक्स प्रोग्राम को संकलित करें (केवल विजुअल स्टूडियो 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 को फिर से शुरू करना मेरे लिए काम नहीं करता था, लेकिन मैं एक 'क्लीन सॉल्यूशन' और फिर 'बिल्ड सॉल्यूशन' बनाकर काम करने में सफल रहा। हालाँकि साफ-सुथरे काम नहीं करने के बाद 'पुनर्निर्माण समाधान' की कोशिश करना। तब मैं एफ 5 के साथ सामान्य रूप से समाधान चला सकता था।


1

जब मुझे यह त्रुटि मिलती है तो मुझे मेरा VS2010 परिनियोजन प्रोजेक्ट (.vdproj) 'भ्रष्ट' लगता है। विशेष रूप से, VDPROJ फ़ाइल के फ़ाइल अनुभाग में आइटम GUID है जो VDPROJ फ़ाइल के HIERARCHY अनुभाग से अनुपलब्ध हैं। यह नीचे विस्तार से वर्णित है।

1) VS2010 परिनियोजन परियोजनाओं में निम्न अनुभाग शामिल हैं:

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

2) HIERARCHY अनुभाग में परिनियोजन प्रोजेक्ट में जोड़ी गई प्रत्येक आइटम (जैसे फ़ाइल) के लिए GUID शामिल हैं। इसके अलावा, प्रोजेक्ट में जोड़ी गई प्रत्येक फ़ाइल DEPLOYABLE> FILE सेक्शन के तहत एक आइटम के रूप में दिखाई देती है । निम्न उदाहरण फ़ाइल msimg32.dll के लिए एक सामान्य कॉन्फ़िगरेशन दिखाता हैHIERARCHY और FILE सेक्शन में मैचिंग 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) FILE सेक्शन में किसी आइटम से जुड़े GUID को HIERARCHY सेक्शन से हटा दिया गया है (यानी FILE सेक्शन में आइटम अनाथ हो गया है)।

3a) पहली समस्या का उदाहरण - FILE में डुप्लिकेट आइटम अनुभाग :

इस उदाहरण में, फ़ाइल msimg32.dll में फ़ाइल अनुभाग में दो प्रविष्टियाँ हैं । पहले (यानी सही) प्रविष्टि में मेल खाने वाले GUID (यानी _1C15DB39774F7E79C84F1CC87ECFD60A) है पदानुक्रम अनुभाग, लेकिन दूसरे के लिए GUID (यानी त्रुटि) प्रविष्टि (यानी 2DDC4FA12BFD46DEAED0053D23331348) में प्रकट नहीं होता पदानुक्रम अनुभाग।

"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 ...
    }
  }
}

3 बी) दूसरी समस्या का उदाहरण - फ़ाइल में अनाथ आइटम अनुभाग :

इस उदाहरण में, फ़ाइल msimg32.dll में फ़ाइल अनुभाग में एक प्रविष्टि है । लेकिन इस प्रविष्टि (यानी A515046ADA6244F2A260E67625E4398F) के साथ जुड़े GUID में HIRARCHY सेक्शन में मेल खाने वाली प्रविष्टि नहीं है (यानी यह गायब है) ।

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

4) समाधान: ऊपर वर्णित दोनों समस्याओं के लिए, समाधान FILE में अनाथ आइटम को हटाना है अनुभाग ।

निम्न उदाहरण दिखाता है कि कैसे बिंदु 3a में FILE सेक्शन, 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) मेरे C # प्रोजेक्ट्स से असेंबली फाइल्स (यानी DLL) और
  • ख) मेरी सी ++ परियोजनाओं (जैसे version.dll, urlmon.dll) से निर्भरता का पता चला

0

यहाँ कुछ हल हैं जो काम करते हैं:

1) सेटअप प्रोजेक्ट से DLLs में से एक समस्या को दूर करना, और उसके बाद फिर से जोड़ना मेरे लिए समस्या का समाधान हो गया। यह तब भी काम आया जब समस्या के साथ कई DLL थे। निकालने और जोड़ने के लिए उनमें से सिर्फ एक को VS2010 ट्रिगर किया ताकि उन सभी को किसी तरह ठीक किया जा सके।

2) समाधान का पुनर्निर्माण करें, फिर निर्भरता को फिर से अपडेट करने का प्रयास करें। पुनर्निर्माण दृश्य स्टूडियो को यह पता लगाने में मदद करता है कि निर्भरताएं क्या हैं, क्योंकि यह कुछ भी नहीं के साथ निर्भरता खोजने के लिए संघर्ष कर सकता है।

3) विज़ुअल स्टूडियो को पुनरारंभ करें

VS2010 हॉटफ़िक्स ऊपर लिंक मेरे लिए काम नहीं किया। कभी-कभी VS2010 को पुनरारंभ करने से समस्या ठीक हो जाएगी और जब वह काम नहीं करता है, तो उपरोक्त कार्य करना।


0

यह तब भी हो सकता है जब आप डिबग करने की कोशिश कर रहे हैं और रिलीज मोड का चयन किया है। मुझे अभी मिल गया :(


0

मैं जोड़ना चाहूंगा, कि मुझे एक ही त्रुटि मिलती है जब मैं समर्पित कंपाइलर कंप्यूटर के बजाय अपने कंप्यूटर से परिनियोजन प्रोजेक्ट को संपादित करता हूं।

पिछली बार जब मुझे वह त्रुटि मिली, तो मुझे अंतिम परिवर्तनों को वापस करने की आवश्यकता थी, और इसे समर्पित कंपाइलर कंप्यूटर से फिर से करना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.