У меня есть проект установки в .NET. Когда я сохраняю проект и другие проекты для подрывной деятельности, проект установки больше не компилируется. Я получаю сообщение об ошибке "Невозможно обновить зависимости проекта".
"Невозможно обновить зависимости проекта" после перехода на Subversion
Ответ 1
В MSDN есть длинный обсуждение. Похоже, есть много возможных причин. Обсуждение включает несколько ссылок на эту проблему от Microsoft. Вот исправление для VS2005 и вот обходной путь для VS2010.
Ответ 2
Закрытие VS2010, а затем повторное открытие всегда работало для меня:)
Ответ 3
У меня была такая же проблема, но ни одна из упомянутых резолюций, похоже, не работала для меня. Реконструкция проекта установки будет работать, но это боль, поскольку мы включаем результаты проекта из 30+ проектов.
То, что я нашел для работы, очень похоже на то, что сделал @Marc.
- Я заметил, какие зависимости были сообщены Visual Studio как ошибки
- Отредактируйте файл .vdproj в Notepad ++
- Найти .dll, который дает проблемы. Вы увидите раздел "ScatterAssemblies". Если он пуст, удалите всю ссылку dll
- Сохранить файл
Во всех случаях у меня было несколько ссылок на одну и ту же 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 получил... но проект установки компилируется и работает нормально.
Ответ 4
Правильная ссылка для hot-fix для VS2010:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
Прекрасно работает после установки
Ответ 5
У меня была аналогичная проблема и нашел исправление в этом очень длинном и старом обсуждении MSDN.
Как пользователь "Jeff Hunsaker" в четверг, 26 августа 2010 г. 17:51 ответил (прямая ссылка невозможна):
Я просто столкнулся с этим при обновлении проектов развертывания Visual Studio 2008 до VS 2010. Решение "Hans" (выше) работало для меня.
- Отредактируйте файл .vdproj в Блокноте.
- Искать "SourcePath" = "8:
- Для каждой сборки /dll укажите полный путь
- Сохранить файл
В моем файле .vdproj у меня было несколько записей, просто ссылающихся на сборку:
"SourcePath" = "8: MyAssembly.DLL "Несмотря на то, что Visual Studio [каким-то образом] знал местоположение файла, я получил ошибку" Не удалось обновить зависимость проекта" до тех пор, пока не предоставил полный путь:
"SourcePath" = "8:.. \.. \..\build\bin\MyCompany.MyAssembly.DLL"
С уважением,
Джеф...
Я заметил, какие зависимости были сообщены Visual Studio и написал script, чтобы исправить их, если это необходимо.
Обратите внимание, что теперь это дает мне предупреждение "Два или несколько объектов имеют одно и то же целевое местоположение (" [targetdir]\MyAssembly.dll "). Но я могу жить с этим.
Ответ 6
Это решило ту же проблему для меня: Я добавил сборки, упомянутые в сообщении об ошибке, в GAC. Когда я перекомпилировал проект, DLL появилась в разделе "Обнаруженные зависимости" в обозревателе решений, и я получил ту же ошибку. Затем я исключил dll (щелкните правой кнопкой мыши и выберите "Исключить" ), и проект окончательно скомпилирован в порядке.
Ответ 7
Проблема может быть вызвана потерянными файлами в разделе "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());
}
}
}
Ответ 8
Мне удалось обойти эту проблему, удалив проект установщика из решения, а затем снова добавив существующий проект.
Ответ 9
Перезапуск VS2010 не сработал у меня, но мне удалось заставить все работать, выполняя "Чистое решение", а затем "Build Solution". Однако попытка "Восстановить решение" после очистки не работала. Тогда я мог бы запустить решение с F5 как обычно.
Ответ 10
Когда я получу эту ошибку, я обнаружил, что мой проект развертывания VS2010 (.vdproj) "поврежден". В частности, элементы в разделе FILE файла VDPROJ имеют идентификатор GUID, отсутствующий в разделе HIERARCHY файла VDPROJ. Это подробно описано ниже.
1) Проекты развертывания VS2010 включают следующие разделы:
"Hierarchy"
{
}
"Deployable"
{
"File"
{
}
}
2) Раздел HIERARCHY содержит GUID для каждого элемента (например, файла), добавленного в проект развертывания. Кроме того, каждый файл, добавленный в проект, отображается как элемент в разделе DEPLOYABLE > FILE. В следующем примере показана нормальная конфигурация файла msimg32.dll. Обратите внимание на соответствующий GUID (то есть _1C15DB39774F7E79C84F1CC87ECFD60A) в разделах HIERARCHY и 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 могут быть повреждены двумя способами:
-
a) Элемент в разделе FILE дублируется, а дублируемому элементу присваивается идентификатор GUID, который не отображается в разделе HIERARCHY.
-
b) GUID, связанный с элементом в разделе FILE, был удален из раздела HIERARCHY (т.е. элемент в FILE сиротой).
3a) Пример первой проблемы - дублированный элемент в разделе FILE:
В этом примере файл msimg32.dll имеет две записи в разделе ФАЙЛ. Первая (то есть правильная) запись имеет соответствующий 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 имеет запись в разделе ФАЙЛ. Но идентификатор 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) из моих проектов С# и
- b) обнаружены зависимости от моих проектов на С++ (например, version.dll, urlmon.dll)
Ответ 11
Вот несколько решений, которые работают:
1) Удаление одной из проблемных DLL из проекта установки, а затем повторное добавление только для того, чтобы решить проблему для меня. Это работало даже тогда, когда было много DLL с проблемой. Удаление и добавление только одного из них вызвало VS2010, чтобы как-то их исправить.
2) Перестройте решение, затем попробуйте обновить зависимости снова. Реконструкция помогает визуальной студии узнать, что такое зависимости, потому что она может изо всех сил пытаться найти зависимости без ничего.
3) Перезапустите Visual Studio
Исправление VS2010, связанное выше, не работает для меня. Иногда перезапуск VS2010 устраняет проблему, и если это не сработает, выполните описанные выше действия.
Ответ 12
Это также может случиться, когда вы пытаетесь отладить и выбрали режим Release. Получил меня прямо сейчас: (
Ответ 13
Я хотел бы добавить, что я получаю ту же ошибку, когда редактирую проект развертывания с моего компьютера, а не на выделенный компьютер компилятора.
В последний раз, когда я получил эту ошибку, мне нужно было отменить последние изменения и повторно сделать это с выделенного компьютера компилятора.