Incapaz de aplicar propriedades de publicação para o item X

89

Sempre que fazemos uma construção em nossa solução principal, recebemos o seguinte aviso:

Não foi possível aplicar propriedades de publicação para o item "microsoft.visualstudio.qualitytools.unittestframework".

Alguém já viu algo assim antes? Alguma ideia de como consertar isso? Isso acontece em todas as nossas máquinas de desenvolvedor e também em nosso servidor de compilação TFS. No entanto, ele só aparece no modo de depuração.

Jonathan Nixon
fonte

Respostas:

164

Parece que o problema está relacionado ao ClickOnce. Navegue até o projeto, clique com o botão direito sobre ele e clique em propriedades. Vá para a guia Publicar e clique em Arquivos do aplicativo. Marque a caixa de seleção 'Mostrar todos os arquivos' e role pela lista de arquivos. Eventualmente, você encontrará o arquivo que tem um ponto de exclamação amarelo. Este arquivo está órfão e precisa ser removido. Clique com o botão direito no arquivo e deve haver uma opção de remoção.

Agora construa a solução e o aviso deve desaparecer.

Jonathan Nixon
fonte
13
Essa é a segunda vez que pesquisei esse problema no Google e encontrei a resposta. Eventualmente, vou aprender. : p
Nick Spreitzer
4
Show all filesé a chave aqui.
MEMark de
4
@NickSpreitzer Terceira vez para mim. Desta vez, fiquei até surpreso com meu próprio comentário.
MEMark
Você também pode atualizar seu arquivo csproj cuidando da seção 'PublishFile'. É claro que isso deve ser feito com muito cuidado.
Jerome
3

A resposta mais votada é perfeita como está, mas aqueles de nós lidando com explosões maiores podem se beneficiar desta resposta alternativa. Ele descreve uma correção análoga no nível do arquivo.

O aviso é causado por um elemento como este:

<PublishFile Include="THIS IS USUALLY SOME IMAGINARY DLL">
  <Visible>False</Visible>
  <Group>
  </Group>
  <TargetPath>
  </TargetPath>
  <PublishState>Exclude</PublishState>
  <IncludeHash>True</IncludeHash>
  <FileType>Assembly</FileType>
</PublishFile>

... no arquivo de projeto (.csproj) emitindo o aviso. Observe o PublishState "Exclude"; este elemento diz "por favor, não publique a DLL imaginária"; esta é obviamente uma instrução desnecessária se nenhuma DLL estiver por perto no momento da publicação, mas também está causando o aviso porque o processo de publicação não pode avaliar a identidade do arquivo.

Você pode remover o PublishFileelemento inteiro para cada item de implantação mencionado nos avisos, desde que tenha PublishState "Exclude". Não remova mecanicamente todos os elementos com PublishState "Exclude", porque se não houver nenhum aviso sobre isso, o arquivo provavelmente está disponível no momento da publicação e pode acabar sendo publicado - o que seria uma alteração indesejada do produto, contanto que você apenas quisesse livre-se do aviso.

Jirka Hanika
fonte