Nie można zastosować właściwości publikowania dla elementu X

90

Za każdym razem, gdy tworzymy kompilację w naszym głównym rozwiązaniu, otrzymujemy następujące ostrzeżenie:

Nie można zastosować właściwości publikowania dla elementu „microsoft.visualstudio.qualitytools.unittestframework”.

Czy ktoś widział coś takiego wcześniej? Jakieś pomysły, jak to naprawić? Dzieje się tak na wszystkich naszych maszynach deweloperskich, a także na naszym serwerze kompilacji TFS. Jednak pojawia się tylko w trybie debugowania.

Jonathan Nixon
źródło

Odpowiedzi:

165

Wygląda na to, że problem jest związany z ClickOnce. Przejdź do projektu, kliknij go prawym przyciskiem myszy i kliknij właściwości. Przejdź do zakładki Publikuj i kliknij Pliki aplikacji. Zaznacz pole wyboru „Pokaż wszystkie pliki” i przewiń listę plików. W końcu natrafisz na plik z żółtym wykrzyknikiem. Ten plik jest osierocony i należy go usunąć. Kliknij plik prawym przyciskiem myszy i powinna istnieć opcja usuwania.

Teraz skompiluj rozwiązanie, a ostrzeżenie powinno zniknąć.

Jonathan Nixon
źródło
14
Dwa razy wyszukałem w Google ten problem i znalazłem tę odpowiedź. W końcu się nauczę. : p
Nick Spreitzer
4
Show all filesjest tutaj kluczem.
MEMark
5
@NickSpreitzer Trzeci raz dla mnie. Tym razem byłem nawet zaskoczony własnym komentarzem.
MEMark
Możesz również zaktualizować plik csproj, dbając o sekcję „PublishFile”. Oczywiście należy to zrobić bardzo ostrożnie.
Jerome
3

Najwyższa głosowana odpowiedź jest idealna w obecnym kształcie, ale ci z nas, którzy mają do czynienia z większymi wybuchami, mogą skorzystać na tej alternatywnej odpowiedzi. Opisuje analogiczną poprawkę na poziomie pliku.

Ostrzeżenie jest spowodowane przez taki element:

<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>

... w pliku projektu (.csproj) emitując ostrzeżenie. Zwróć uwagę na PublishState „Exclude”; ten element mówi „proszę nie publikować wyimaginowanej biblioteki DLL”; jest to oczywiście niepotrzebna instrukcja, jeśli w czasie publikacji nie ma takiej biblioteki DLL, ale powoduje to również ostrzeżenie, ponieważ proces publikowania nie może ocenić tożsamości pliku.

Możesz usunąć cały PublishFileelement z każdego elementu wdrożenia wymienionego w ostrzeżeniach, o ile ma on PublishState „Exclude”. Nie usuwaj mechanicznie każdego elementu za pomocą PublishState „Exclude”, ponieważ jeśli nie było o tym ostrzeżenia, plik jest prawdopodobnie dostępny w czasie publikacji i może zostać opublikowany - co byłoby niepożądaną zmianą produktu, o ile tylko chciałbyś pozbyć się ostrzeżenia.

Jirka Hanika
źródło