Subversion'a katıldıktan sonra "projenin bağımlılıkları güncellenemiyor"


Yanıtlar:


50

MSDN'de bununla ilgili uzun bir tartışma dizisi var. Pek çok olası neden var gibi görünüyor. Tartışma, bu sorun için Microsoft'tan birkaç bağlantı içerir. İşte VS2005 için bir düzeltme ve işte VS2010 için bir geçici çözüm .


21
"Kaldır ve sonra projeyi tekrar ekle" yaklaşımı benim için çalışıyor.
Mike Fuchs

1
+1 .VDPROJ dosyasında bağımlılık yolunu manuel olarak düzeltmek zorunda kaldım. Biraz zaman kazanmak için cevabıma bakın. Düzeltme hiç yardımcı olmadı.
Marc

9
Radbyx'e +1. Basit yorumunuz muhtemelen beni bir saatlik hayal kırıklığından kurtardı :)
JOpuckman

4
Yeniden başlatmak da benim için sorunu çözdü. Teşekkürler radbyx!
Josh Lowry

Çözümü kapatıp yeniden açın. Bu benim için çalıştı :-)
FIV

93

VS2010'u kapatmak ve ardından yeniden açmak benim için her zaman çalıştı :)


4
Bayım, harikasınız.
Panda Pijama

3
Bu sorunu Google'da araştırmam, buraya gelmem ve bu cevabı zaten yükseltmiş olduğumu görmem, bunun muhtemelen benim için işe yarayacağını söyledi. Ve yaptı.
jcollum

1
Siz bayım, yine harikasınız!
Panda Pijama

32

Aynı sorunu yaşadım, ancak bahsedilen çözümlerin hiçbiri benim için işe yaramadı. Kurulum projesini yeniden inşa etmek işe yarayacak, ancak 30'dan fazla projenin proje çıktılarını dahil ettiğimiz için bu bir acı.

Çalışmak için bulduğum şey, @ Marc'ın yaptığına çok benzer bir yaklaşım.

  1. Visual Studio tarafından hangi bağımlılıkların hata olarak bildirildiğini not ettim
  2. .Vdproj dosyasını Notepad ++ ile düzenleyin
  3. Sorun veren .dll dosyasını arayın. Bir "ScatterAssemblies" bölümü göreceksiniz. Boşsa, tüm dll referansını silin
  4. Dosyayı kaydet

Her durumda, aynı dll'ye birden fazla başvurum vardı (bunun nasıl olduğundan emin değilim)

Doğru referans örneği:

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

Yanlış referans örneği:

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

Ayrıca, @Marc'ın aldığı "İki veya daha fazla nesne aynı hedef konuma sahip ('[targetdir] \ MyAssembly.dll')" uyarısını aldım ... ancak kurulum projesi derleniyor ve sorunsuz çalışıyor.


2
Tüm Filemontaj referanslarını sildim. Mükemmel çalıştı.
MartinHN

Bu, pek çok kez. Bu hataları gidermek için saçlarımı yırtıyorum ve önerilen diğer düzeltmelerden hiçbiri işe yaramadı.
John Källén

Dosya bölümü içeriğinin tamamını silerken bu benim için çalıştı.
alan


6

Benzer sorunu yaşadım ve MSDN hakkındaki bu çok uzun ve eski tartışmada bir düzeltme buldum .
26 Ağustos 2010 Perşembe 17:51 'Jeff Hunsaker' kullanıcısı yanıtladığı gibi (doğrudan bağlantı mümkün değil):

Visual Studio 2008 Dağıtım Projelerini VS 2010'a yükseltirken bununla karşılaştım. Hans'ın (yukarıdaki) çözümü benim için çalıştı.

  1. .Vdproj dosyasını Not Defteri'nde düzenleyin.
  2. "SourcePath" = "8'i arayın:
  3. Her derleme / dll için tam yolu sağlayın
  4. Dosyayı kaydet

.Vdproj dosyamda, yalnızca derlemeye başvuran birkaç girdi vardı:
"SourcePath" = "8: MyAssembly.DLL"

Visual Studio [bir şekilde] dosya konumunu bilmesine rağmen, tam yolu sağlayana kadar "Projenin bağımlılıkları güncellenemiyor" hatasını aldım:

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

Saygılarımızla,

Jeff ...

Visual Studio tarafından hangi bağımlılıkların rapor edildiğini not ettim ve gerekli olması durumunda bunları düzeltmek için bir betik yazdım.

Bunun artık bana bir uyarı verdiğini unutmayın "İki veya daha fazla nesne aynı hedef konuma sahip ('[targetdir] \ MyAssembly.dll'). Ama bununla yaşayabilirim.


4

Bu benim için aynı sorunu çözdü: Hata mesajında ​​belirtilen derlemeleri GAC'ye ekledim. Projeyi yeniden derlediğimde dll'ler Çözüm Gezgini'nde "Algılanan Bağımlılıklar" altında göründü ve aynı hatayı aldım. Sonra dll'leri dışarıda bıraktım (sağ tıklayın ve Hariç Tut'u seçin) ve proje sonunda tamamlandı.


3

Sorun, .vdproj dosyasının "Dağıtılabilir" -> "Dosya" bölümündeki artık dosyalardan kaynaklanıyor olabilir. Bunu, Visual Studio'daki kurulum projesinden tüm dosyaları kaldırarak doğrulayabilirsiniz (önce bir yedekleme yapın). .Vdproj dosyasını bir metin düzenleyiciyle açarsanız ve yine de "Dosya" bölümünde girişler görürseniz bu sorunu yaşarsınız. Bu dosyaların anahtarlarını not edebilir ve orijinal .vdproj dosyasından kaldırabilirsiniz ve yeniden çalışması gerekir.

Alternatif olarak bu hızlı düzeltme programını derleyin (yalnızca Visual Studio 2010 ile test edilmiştir):

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

Yükleyici projesini çözümden kaldırarak ve ardından mevcut projeyi tekrar ekleyerek bu sorunu çözmeyi başardım.


Benim için de çalıştı. Teşekkürler.
DTDev

1

VS2010'u yeniden başlatmak benim için işe yaramadı, ancak bir 'Temiz Çözüm', ardından bir 'Çözüm Oluşturma' yaparak her şeyin çalışmasını sağlamayı başardım. Ancak temizlikten sonra 'Çözümü Yeniden Oluştur' denenmesi işe yaramadı. Sonra Çözümü normal olarak F5 ile çalıştırabilirim.


1

Bu hatayı aldığımda VS2010 dağıtım projemin (.vdproj) 'bozuk' olduğunu görüyorum. Özellikle, VDPROJ dosyasının FILE bölümündeki öğeler , VDPROJ dosyasının HIERARCHY bölümünde eksik olan GUID'lere sahiptir. Bu, aşağıda ayrıntılı olarak açıklanmaktadır.

1) VS2010 dağıtım projeleri aşağıdaki bölümleri içerir:

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

2) HIERARCHY bölümü, dağıtım projesine eklenen her öğe (örn. Dosya) için GUID'leri içerir. Ek olarak, projeye eklenen her dosya DEPLOYABLE> DOSYA bölümünde bir öğe olarak görünür . Aşağıdaki örnekte msimg32.dll dosyası için normal bir yapılandırma gösterilmektedir . HIERARCHY ve DOSYA bölümlerinde eşleşen GUID'e (yani _1C15DB39774F7E79C84F1CC87ECFD60A) dikkat edin .

"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 dağıtım projelerim iki şekilde bozulabilir:

  • a) DOSYA bölümündeki bir öğe çoğaltılır ve çoğaltılan öğeye HIERARCHY bölümünde görünmeyen bir GUID verilir .

  • b) DOSYA bölümündeki bir öğeyle ilişkili GUID , HIERARCHY bölümünden kaldırılmıştır (yani, DOSYA bölümündeki öğe artık kalmıştır).

3a) İlk problem örneği - DOSYA bölümünde yinelenen öğe :

Bu örnekte, msimg32.dll dosyasının DOSYA bölümünde iki girişi vardır . İlk (yani doğru) girişin HIERARCHY bölümünde eşleşen bir GUID (yani _1C15DB39774F7E79C84F1CC87ECFD60A) vardır , ancak ikinci (yani hata) giriş için GUID (yani 2DDC4FA12BFD46DEAED0053D23331348) HIERARCHY bölümünde görünmez .

"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) İkinci problem örneği - DOSYA bölümündeki sahipsiz öğe :

Bu örnekte, msimg32.dll dosyasının DOSYA bölümünde bir girişi vardır . Ancak bu girişle ilişkili GUID (yani A515046ADA6244F2A260E67625E4398F) HIERARCHY bölümünde eşleşen bir girişe sahip değil (yani eksik) .

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

4) Çözüm: Yukarıda gösterilen her iki sorun için de çözüm, DOSYA bölümündeki sahipsiz öğeyi silmektir .

Aşağıdaki örnek, msimg32.dll için ikinci giriş silindikten sonra yukarıdaki 3a noktasındaki FILE bölümünün nasıl görüneceğini gösterir .

"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'daki bozuk girişlerin yalnızca şunlar için oluştuğunu buldum:

  • a) C # projelerimden derleme dosyaları (yani DLL) ve
  • b) C ++ projelerimden tespit edilen bağımlılıklar (örneğin version.dll, urlmon.dll)

0

İşte işe yarayan birkaç çözüm:

1) Sorunlu DLL'lerden birini kurulum projesinden kaldırmak ve ardından yalnızca birini yeniden eklemek sorunu benim için çözdü. Sorunlu birçok DLL varken bile bu işe yaradı. Bunlardan yalnızca birini kaldırıp eklemek VS2010'u bir şekilde düzeltmek için tetikledi.

2) Çözümü yeniden oluşturun, ardından bağımlılıkları tekrar güncellemeyi deneyin. Yeniden oluşturma, görsel stüdyonun bağımlılıkların ne olduğunu keşfetmesine yardımcı olur, çünkü hiçbir şey inşa edilmeden bağımlılıkları bulmakta zorlanıyor olabilir.

3) Visual Studio'yu yeniden başlatın

Yukarıda bağlantılı VS2010 düzeltmesi benim için çalışmadı. Bazen VS2010'u yeniden başlatmak sorunu çözer ve bu işe yaramadığında yukarıdakileri yapmak işe yarar.


0

Bu, hata ayıklamaya çalıştığınızda ve Yayın modunu seçtiğinizde de olabilir. Şimdi anladım :(


0

Özel derleyici bilgisayar yerine bilgisayarımdan dağıtım projesini düzenlediğimde aynı hatayı aldığımı eklemek isterim.

Bu hatayı en son aldığımda, son değişiklikleri geri almam ve bunu özel derleyici bilgisayardan yeniden yapmam gerekiyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.