2010-07-12 3 views
89

У меня есть проект установки в .NET. Когда я сохраняю проект и другие проекты для подрывной деятельности, проект установки больше не компилируется. Я получаю сообщение об ошибке «Невозможно обновить зависимости проекта».«Невозможно обновить зависимости проекта» после выполнения Subversion

ответ

49

Существует длинная discussion нить об этом на MSDN. Похоже, есть много возможных причин. Обсуждение включает несколько ссылок на эту проблему от Microsoft. Here is a hotfix для VS2005 и here is a workaround для VS2010.

+0

Спасибо, я проверю это. –

+21

Подход «удалить, а затем добавить проект снова» работает для меня. –

+1

+1 Я должен был исправить путь зависимости вручную в файле .VDPROJ. См. Мой ответ, чтобы, возможно, выиграть некоторое время. Исправление не помогло. – Marc

6

У меня была аналогичная проблема, и я нашел исправление в этой очень длинной и старой дискуссии на MSDN.
Как пользователь «Джефф Хансакер» в четверг, 26 августа 2010 5:51 вечера ответил (прямая связь не возможно):

Я просто столкнулся с этим при обновлении проектов развертывания Visual Studio 2008 в VS 2010. Hans «(выше) решение работало для меня.

  1. Редактировать файл .vdproj в Блокноте.
  2. Поиск "SourcePath" = «8:
  3. Для каждой сборки/DLL, обеспечивают полный путь
  4. Сохранить файл

В моем файле .vdproj, у меня было несколько записей просто ссылки на сборку :
«SourcePath» = «8: MyAssembly.DLL»

Даже если Visual Studio [как-то] знал местоположение файла, я получил «не удалось обновить зависимости проекта» ошибки, пока я не предоставил полный путь :

"SourcePath" = "8: .. \ .. \ .. \ построить \ Bin \ MyCompany.MyAssembly.DLL"

С уважением,

Джефф ...

Я отметил, какие зависимости были сообщены Visual Studio и написал сценарий, чтобы исправить их, если это необходимо.

Обратите внимание, что это теперь дает мне предупреждение «Два или более объектов имеют одинаковое целевое местоположение („[TARGETDIR] \ MyAssembly.dll“). Но я могу жить с этим.

+0

Это решило мою проблему! Спасибо! – Hugo

29

Я имел в то же время, ни одна из упомянутых резолюций не работала для меня. Восстановление проекта установки будет работать, но это боль, поскольку мы включаем результаты проекта из 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

В итоге я удалил все ссылки на сборку «Файл». Работала отлично. – MartinHN

+0

Это единственное обходное решение, которое работает для меня. Благодаря!!! –

+0

Это так много раз. Я разорвал свои волосы, чтобы устранить эти ошибки, и ни одна из других исправленных проблем не сработала. –

10

Правильная ссылка для горячего исправления для VS2010 является:

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

отлично работает после установки

+1

Это сработало для меня. Перезапуск VS и редактирование .vdproj не сделали. –

+1

. Связанная с ним статья в KB: http://support.microsoft.com/kb/2286556 –

94

Закрытие VS2010, а затем повторное открытие он всегда работал для меня :)

+4

Вы, сэр, потрясающие. –

+3

Тот факт, что я искал эту проблему, пришел сюда и увидел, что я уже поддержал этот ответ, сказал мне, что это, вероятно, сработает для меня. И это произошло. – jcollum

+1

Вы, сэр, еще удивительны! –

4

Это решило ту же проблему для меня: Я добавил сборки, упомянутые в сообщении об ошибке, в GAC. Когда я перекомпилировал проект, DLL появилась в разделе «Обнаруженные зависимости» в обозревателе решений, и я получил ту же ошибку. Затем я исключил dll (щелкните правой кнопкой мыши и выберите «Исключить»), и проект окончательно скомпилирован в порядке.

0

Вот несколько решений, которые работают:

1) Удаление одной из проблемных библиотек DLL от проекта установки, а затем повторно добавив только, что одна проблема решена для меня. Это работало даже тогда, когда было много DLL с проблемой. Удаление и добавление только одного из них вызвало VS2010, чтобы как-то их исправить.

2) Перестройте решение, а затем попробуйте обновить зависимости. Реконструкция помогает визуальной студии узнать, что такое зависимости, потому что она может изо всех сил пытаться найти зависимости без ничего.

3) Перезапустите Visual Studio

VS2010 исправление связано выше, не работает для меня. Иногда перезапуск VS2010 устраняет проблему, и когда это не сработает, выполнение вышеописанных работ будет выполнено.

3

Проблема может быть вызвана потерянными файлами в разделе «Развертывание» -> «Файл» файла .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()); 
     } 
    } 
} 
1

Перезапуск VS2010 не работал для меня, но мне удалось получить все работает, делая «Очистить решение», а затем «Создание решения». Однако попытка «Восстановить решение» после очистки не работала.Тогда я мог бы запустить Решение с F5 как обычно.

3

Мне удалось обойти эту проблему, удалив проект установщика из решения, а затем снова добавив существующий проект.

+0

Спасибо. Это сработало для меня. –

+0

Работал для меня тоже. Благодарю. – Durgesh

0

Это также может произойти, если вы пытаетесь отладить и выбрали режим Release. только сейчас Got меня :(

1

Когда я получаю эту ошибку я считаю, мой проект развертывания VS2010 (.vdproj) является «поврежден». В частности, элементы в FILE раздел файла VDPROJ имеют GUID в том, что не хватает от . ИЕРАРХИЯ раздел файла VDPROJ Это подробно описано ниже

1) проекты развертывания VS2010 включают в себя следующие разделы:.

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

2) ИЕРАРХИЯ раздел содержит GUID для каждого элемента (например, файл), добавленный в проект развертывания. Кроме того, каждый файл, добавленный в проект, отображается как элемент в разделе DEPLOYABLE> FILE. В следующем примере показана нормальная конфигурация для файла msimg32.dll. Обратите внимание на соответствующий идентификатор GUID (т. Е. _1C15DB39774F7E79C84F1CC87ECFD60A) в разделах ИЕРАРХИИ и 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) Мои VS2010 проекты развертывания могут быть повреждены двумя способами:

  • а) элемент в FILE разделе дублируется и дублирует пункт дается GUID, который не делает появляются в разделе HIERARCHY.

  • б) идентификатор GUID, связанный с элементом в FILE секции был удален из HIERARCHY секции (т.е. элемента в FILE секции сиротами).

3a) Пример первой задачи - дублируется элемент в FILE раздел:

В этом примере файл msimg32.dll имеет две записи в FILE разделе. Первый (то есть правильно) запись имеет соответствующий идентификатор GUID (т.е. _1C15DB39774F7E79C84F1CC87ECFD60A) в Иерархии секции , но идентификатор 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 сечение в точке 3а выше будет появляться после того, как второй вход для 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 произошло только:

  • а) сборочные файлы (DLL) из моих проектов C# и
  • б) обнаружены зависимости от моего C++ проекты (например, version.dll, urlmon.dll)
0

Я хотел бы добавить, что я получаю ту же ошибку, когда редактирую проект развертывания с моего компьютера, а не на выделенный компьютер компилятора.

Последний раз, когда я получил эту ошибку, мне нужно было отменить последние изменения и переделать ее с выделенного компьютера компилятора.

Смежные вопросы