No se pueden aplicar propiedades de publicación para el elemento X

90

Siempre que hacemos una compilación en nuestra solución principal, recibimos la siguiente advertencia:

No se pueden aplicar propiedades de publicación para el elemento "microsoft.visualstudio.qualitytools.unittestframework".

¿Alguien habia visto algo como esto antes? ¿Alguna idea sobre cómo solucionar este problema? Sucede en todas nuestras máquinas de desarrollo y también en nuestro servidor de compilación TFS. Sin embargo, solo aparece en el modo de depuración.

Jonathan Nixon
fuente

Respuestas:

166

Parece que el problema está relacionado con ClickOnce. Navegue hasta el proyecto, haga clic derecho sobre él y haga clic en propiedades. Vaya a la pestaña Publicar y haga clic en Archivos de aplicación. Marque la casilla de verificación 'Mostrar todos los archivos' y desplácese por la lista de archivos. Eventualmente, se encontrará con el archivo que tiene un signo de exclamación amarillo. Este archivo está huérfano y debe eliminarse. Haga clic derecho en el archivo y debería haber una opción de eliminación.

Ahora cree la solución y la advertencia debería desaparecer.

Jonathan Nixon
fuente
14
Eso es dos veces que busqué en Google ese problema y encontré esta respuesta. Eventualmente aprenderé. : p
Nick Spreitzer
4
Show all fileses la clave aquí.
MEMark
5
@NickSpreitzer Tercera vez para mí. Esta vez incluso me sorprendió mi propio comentario.
MEMark
También puede actualizar su archivo csproj ocupándose de la sección 'PublishFile'. Por supuesto, esto debe hacerse con mucho cuidado.
Jerome
3

La respuesta más votada es perfecta tal como está, pero aquellos de nosotros que lidiamos con arrebatos más grandes podemos beneficiarnos de esta respuesta alternativa. Describe una solución análoga a nivel de archivo.

La advertencia es causada por un 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>

... en el archivo del proyecto (.csproj) que emite la advertencia. Observe el PublishState "Excluir"; este elemento dice "por favor no publique la DLL imaginaria"; Obviamente, esta es una instrucción innecesaria si no hay tal DLL en ningún lugar en el momento de la publicación, pero también está causando la advertencia porque el proceso de publicación no puede evaluar la identidad del archivo.

Puede eliminar todo el PublishFileelemento para cada elemento de implementación mencionado en las advertencias, siempre que tenga PublishState "Excluir". No elimine mecánicamente todos los elementos con PublishState "Exclude", porque si no hubo ninguna advertencia al respecto, el archivo probablemente esté disponible en el momento de la publicación y podría terminar publicado, lo que sería un cambio de producto no deseado siempre que solo quisiera deshacerse de la advertencia.

Jirka Hanika
fuente