O que exatamente é a diferença entre o HintPath
em um arquivo .csproj e ReferencePath
em um .csproj.user
arquivo? Estamos tentando nos comprometer com uma convenção em que as DLLs de dependência estão em um repositório svn "releases" e todos os projetos apontam para um release específico. Como diferentes desenvolvedores têm estruturas de pastas diferentes, as referências relativas não funcionam, então criamos um esquema para usar uma variável de ambiente apontando para a pasta de releases do desenvolvedor em particular para criar uma referência absoluta. Portanto, depois que uma referência é adicionada, editamos manualmente o arquivo do projeto para alterar a referência para um caminho absoluto usando a variável de ambiente
Percebi que isso pode ser feito com o HintPath
e o ReferencePath
, mas a única diferença que pude encontrar entre eles é que HintPath
é resolvido no momento da construção e ReferencePath
quando o projeto é carregado no IDE. Não tenho muita certeza de quais são as ramificações disso. Percebi que o VS às vezes reescreve o .csproj.user
e tenho que reescrever o ReferencePath
, mas não tenho certeza do que desencadeia isso.
Ouvi dizer que é melhor não fazer o check-in do .csproj.user
arquivo, uma vez que é específico do usuário, então gostaria de procurar por isso, mas também ouvi dizer que a HintPath
DLL especificada não é "garantida" para ser carregada se a mesma DLL está localizada no diretório de saída do projeto. Alguma idéia sobre isso?
fonte
Procure no arquivo Microsoft.Common.targets
A resposta para a pergunta está no arquivo
Microsoft.Common.targets
da sua versão da estrutura de destino.Para o .NET Framework versão 4.0 (e 4.5!), O elemento AssemblySearchPaths é definido assim:
Para o .NET Framework 3.5, a definição é a mesma, mas o comentário está errado. A definição 2.0 é um pouco diferente, usa $ (OutputPath) em vez de $ (OutDir).
Na minha máquina, tenho as seguintes versões do arquivo Microsoft.Common.targets:
Isso ocorre com o Visual Studio 2008, 2010 e 2013 instalado no Windows 7.
O fato de o diretório de saída ser pesquisado pode ser um pouco frustrante (como o pôster original indica) porque pode ocultar um HintPath incorreto. A solução cria OK na sua máquina local, mas é interrompida quando você cria uma estrutura de pastas limpa (por exemplo, na máquina de compilação).
fonte
Minha própria experiência foi que é melhor manter um de dois tipos de referências de montagem:
Descobri (como você descreveu) outros métodos que podem ser facilmente quebrados ou ter requisitos de manutenção irritantes.
Qualquer montagem que eu não queira que o GAC precise morar no diretório de execução. Qualquer assembly que não esteja ou não possa estar no diretório de execução I GAC (gerenciado por eventos de criação automática).
Isso não me deu nenhum problema até agora. Embora eu tenha certeza de que há uma situação em que não funcionará, a resposta usual para qualquer problema foi "ah, apenas GAC!". 8 D
Espero que ajude!
fonte
Embora este seja um documento antigo, ele me ajudou a resolver o problema do 'HintPath' sendo ignorado em outra máquina. Isso ocorreu porque a DLL referenciada também precisava estar no controle de origem:
https://msdn.microsoft.com/en-us/library/ee817675.aspx#tdlg_ch4_includeoutersystemassemblieswithprojects
Excerto:
fonte