“Incapaz de atualizar as dependências do projeto” após comprometer-se com o Subversion

87

Eu tenho um projeto de instalação em .NET. Quando eu salvo o projeto e os outros projetos no subversion, o projeto de configuração não compila mais. Recebo o erro "Não é possível atualizar as dependências do projeto."

Jason N. Gaylord
fonte

Respostas:

50

Há um longo tópico de discussão sobre isso no MSDN. Parece que existem muitas causas possíveis. A discussão inclui alguns links da Microsoft para esse problema. Aqui está um hotfix para o VS2005 e aqui uma solução alternativa para o VS2010.

sargento
fonte
21
A abordagem "remover e adicionar o projeto novamente" funciona para mim.
Mike Fuchs
1
+1 eu tive que corrigir o caminho de dependência manualmente no arquivo .VDPROJ. Veja minha resposta para possivelmente ganhar algum tempo. O hotfix não ajudou em nada.
Marc
9
+1 para radbyx. Seu simples comentário provavelmente me salvou uma hora de frustração :)
JOpuckman de
4
Reiniciar também consertou para mim. Obrigado radbyx!
Josh Lowry
Fechando a solução e depois abrindo-a novamente. Isso funcionou para mim :-)
FIV
93

Fechar o VS2010 e reabri-lo sempre funcionou para mim :)

Chuck Claunch
fonte
4
Você senhor, é incrível.
Panda Pajama
3
O fato de eu ter pesquisado esse problema no Google, vim aqui e vi que já tinha votado a favor dessa resposta me disse que provavelmente funcionaria para mim. E assim foi.
jcollum
1
Você senhor, é incrível mais uma vez!
Panda Pyjama
32

Eu tive o mesmo problema, mas nenhuma das resoluções mencionadas parecia funcionar para mim. Reconstruir o projeto de configuração funcionaria, mas é uma dor, pois incluímos as saídas do projeto de mais de 30 projetos.

O que descobri para funcionar é uma abordagem muito semelhante ao que o @Marc fazia.

  1. Observei quais dependências foram relatadas pelo Visual Studio como erros
  2. Edite o arquivo .vdproj no Notepad ++
  3. Pesquise o .dll que está apresentando problemas. Você verá uma seção "ScatterAssemblies". Se estiver vazio, exclua toda a referência dll
  4. Salvar Arquivo

Em todos os casos, tive várias referências à mesma dll (não tenho certeza de como isso aconteceu)

Exemplo de referência correta:

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

Exemplo de referência incorreta:

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

Eu também recebi o mesmo aviso "Dois ou mais objetos têm o mesmo local de destino ('[targetdir] \ MyAssembly.dll')" que @Marc recebeu ... mas o projeto de instalação compila e funciona bem.

Jabezz
fonte
2
Acabei excluindo todas as Filereferências de montagem. Funcionou perfeitamente.
MartinHN
Isso, tantas vezes. Tenho arrancado os cabelos ao tentar resolver esses erros, e nenhuma das outras correções sugeridas funcionou.
John Källén
Isso funcionou para mim, ao excluir todo o conteúdo da seção do arquivo, não.
alan
10

O link correto para hot-fix para VS2010 é:

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

Funciona bem após a instalação

Pranav Singh
fonte
1
Isso funcionou para mim. Reiniciar o VS e editar o .vdproj não.
Colin Pickard
O Microsoft Connect foi desativado e o link acima nos leva a uma página que não se preocupa em informar onde esse hotfix está localizado agora.
dotNET
6

Tive o problema semelhante e encontrei uma solução nesta discussão muito longa e antiga no MSDN .
Como o usuário 'Jeff Hunsaker' na quinta-feira, 26 de agosto de 2010 17:51 respondeu (link direto não é possível):

Acabei de encontrar isso ao atualizar os Projetos de implantação do Visual Studio 2008 para o VS 2010. A solução de Hans (acima) funcionou para mim.

  1. Edite o arquivo .vdproj no Bloco de notas.
  2. Procure por "SourcePath" = "8:
  3. Para cada assembly / dll, forneça o caminho completo
  4. Salvar Arquivo

Dentro do meu arquivo .vdproj, eu tinha várias entradas simplesmente referenciando o assembly:
"SourcePath" = "8: MyAssembly.DLL"

Mesmo que o Visual Studio [de alguma forma] soubesse a localização do arquivo, recebi o erro "Não foi possível atualizar as dependências do projeto" até fornecer o caminho completo:

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

Saudações,

Jeff ...

Observei quais dependências foram relatadas pelo Visual Studio e escrevi um script para corrigi-las caso isso seja necessário.

Observe que isso agora me dá um aviso "Dois ou mais objetos têm o mesmo local de destino ('[targetdir] \ MyAssembly.dll'). Mas eu posso viver com isso.

Marc
fonte
4

Isso resolveu o mesmo problema para mim: adicionei os assemblies que foram mencionados na mensagem de erro ao GAC. Quando recompilei o projeto, as dll's apareceram em "Dependências detectadas" no Solution Explorer e recebi o mesmo erro. Então eu excluí as dll's (clique com o botão direito e selecione Excluir) e o projeto finalmente compilado ok.

Arne
fonte
3

O problema pode ser causado por arquivos órfãos na seção "Implementável" -> "Arquivo" do arquivo .vdproj. Você pode verificar isso removendo todos os arquivos do projeto de instalação no Visual Studio (faça um backup primeiro). Se você abrir o arquivo .vdproj com um editor de texto e ainda vir as entradas na seção "Arquivo", você terá esse problema. Você pode anotar as chaves desses arquivos e removê-los do arquivo .vdproj original e deve funcionar novamente.

Como alternativa, compile este programa de correção rápida (testado apenas com 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());
        }
    }
}
silenciosamente confiante
fonte
3

Consegui contornar esse problema removendo o projeto do instalador da solução e, em seguida, adicionando o projeto existente novamente.

Apogeu
fonte
Funcionou para mim também. Obrigado.
DTdev
1

Reiniciar o VS2010 não funcionou para mim, mas consegui fazer tudo funcionar fazendo uma 'Solução Limpa' e depois uma 'Solução de Construção'. No entanto, tentar 'Rebuild Solution' após a limpeza não funcionou. Então, eu poderia executar a solução com F5 normalmente.

Sr. Chops
fonte
1

Quando recebo esse erro, descubro que meu projeto de implantação do VS2010 (.vdproj) está 'corrompido'. Especificamente, os itens na seção FILE do arquivo VDPROJ têm GUIDs que estão faltando na HIERARQUIA seção do arquivo VDPROJ. Isso é descrito em detalhes abaixo.

1) Projetos de implantação VS2010 incluem as seguintes seções:

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

2) A seção HIERARQUIA contém GUIDs para cada item (por exemplo, arquivo) adicionado ao projeto de implantação. Além disso, cada arquivo adicionado ao projeto aparece como um item na seção DEPLOYABLE> FILE . O exemplo a seguir mostra uma configuração normal para o arquivo msimg32.dll . Observe o GUID correspondente (ou seja, _1C15DB39774F7E79C84F1CC87ECFD60A) nas seções HIERARQUIA e ARQUIVO .

"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) Meus projetos de implantação do VS2010 podem ser corrompidos de duas maneiras:

  • a) Um item no seção ARQUIVO é duplicado e o item duplicado recebe um GUID que não aparece na seção HIERARQUIA .

  • b) O GUID associado a um item do ARQUIVO seção foi removido da seção HIERARQUIA (ou seja, o item na seção ARQUIVO é órfão).

3a) Exemplo de primeiro problema - item duplicado em ARQUIVO seção :

Neste exemplo, o arquivo msimg32.dll possui duas entradas na seção FILE . A primeira entrada (ou seja, correta) tem um GUID correspondente (ou seja, _1C15DB39774F7E79C84F1CC87ECFD60A) na seção HIERARQUIA , mas o GUID para a segunda (ou seja, erro) entrada (ou seja, 2DDC4FA12BFD46DEAED0053D23331348) não aparece na seção 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) Exemplo de segundo problema - item órfão no ARQUIVO seção :

Neste exemplo, o arquivo msimg32.dll possui uma entrada na seção FILE . Mas o GUID associado a esta entrada (ou seja, A515046ADA6244F2A260E67625E4398F) não tem uma entrada correspondente (ou seja, está ausente) na seção HIERARQUIA .

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

4) Solução: Para ambos os problemas ilustrados acima, a solução é excluir o item órfão na seção ARQUIVO .

O exemplo a seguir mostra como a seção FILE no ponto 3a acima seria exibida após a segunda entrada para msimg32.dll ter sido excluída.

"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) Encontrei que as entradas corrompidas no VDPROJ ocorreram apenas para:

  • a) arquivos de montagem (ou seja, DLL) de meus projetos C # e
  • b) detectei dependências de meus projetos C ++ (por exemplo, version.dll, urlmon.dll)
Ian Bell
fonte
0

Aqui estão algumas soluções que funcionam:

1) Remover uma das DLLs problemáticas do projeto de instalação e, em seguida, adicionar apenas aquela resolveu o problema para mim. Isso funcionou mesmo quando havia muitas DLLs com o problema. Remover e adicionar apenas um deles acionou o VS2010 para consertá-los de alguma forma.

2) Reconstrua a solução e tente atualizar as dependências novamente. A reconstrução ajuda o visual studio a descobrir quais são as dependências, porque ele pode estar lutando para encontrar as dependências sem nada construído.

3) Reinicie o Visual Studio

O hotfix VS2010 vinculado acima não funcionou para mim. Às vezes, reiniciar o VS2010 resolverá o problema e, quando isso não funcionar, siga as instruções acima.

Leigh McCulloch
fonte
0

Isso também pode acontecer quando você está tentando depurar e selecionou o modo Release. Me pegou agora :(

Richard N
fonte
0

Eu gostaria de acrescentar que recebo o mesmo erro quando edito o projeto de implantação em meu computador em vez de no computador compilador dedicado.

A última vez que recebi esse erro, precisei reverter as últimas alterações e refazer a partir do computador compilador dedicado.

Hugo
fonte