Tidak dapat menerapkan properti terbitkan untuk item X

90

Setiap kali kami melakukan build di solusi utama kami, kami menerima peringatan berikut:

Tidak dapat menerapkan properti terbitkan untuk item "microsoft.visualstudio.qualitytools.unittestframework".

Adakah yang pernah melihat yang seperti ini sebelumnya? Ada ide tentang cara memperbaikinya? Ini terjadi di semua mesin developer kami dan juga di server build TFS kami. Namun, ini hanya muncul dalam mode Debug.

Jonathan Nixon
sumber

Jawaban:

166

Tampaknya masalah terkait dengan ClickOnce. Arahkan ke proyek, klik kanan padanya dan klik properti. Buka tab Publikasikan dan klik File Aplikasi. Centang kotak 'Tampilkan semua file' dan gulir daftar file. Akhirnya, Anda akan menemukan file yang memiliki tanda seru kuning di atasnya. File ini menjadi yatim piatu dan perlu dihapus. Klik kanan pada file tersebut dan harus ada opsi hapus.

Sekarang buat solusi dan peringatannya akan hilang.

Jonathan Nixon
sumber
14
Itu dua kali saya mencari masalah itu di Google dan menemukan jawaban ini. Akhirnya saya akan belajar. : p
Nick Spreitzer
4
Show all filesadalah kuncinya di sini.
MEMark
5
@NickSpreitzer Ketiga kalinya untukku. Kali ini saya bahkan terkejut dengan komentar saya sendiri.
MEMark
Anda juga dapat memperbarui file csproj Anda dengan mengurus bagian 'PublishFile'. Tentu ini harus dilakukan dengan sangat hati-hati.
Jerome
3

Jawaban pilihan teratas sudah sempurna sebagaimana adanya, tetapi bagi kita yang berurusan dengan ledakan yang lebih besar mungkin mendapat manfaat dari jawaban alternatif ini. Ini menjelaskan perbaikan analog pada level file.

Peringatan itu disebabkan oleh elemen seperti ini:

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

... di file proyek (.csproj) yang mengeluarkan peringatan. Perhatikan PublishState "Exclude"; elemen ini mengatakan "tolong jangan publikasikan DLL imajiner"; ini jelas merupakan instruksi yang tidak perlu jika DLL tersebut tidak ada di mana pun pada waktu publikasi, tetapi hal ini juga menyebabkan peringatan karena proses publikasi tidak dapat mengevaluasi identitas file.

Anda dapat menghapus seluruh PublishFileelemen untuk setiap item penerapan yang disebutkan dalam peringatan, selama memiliki PublishState "Exclude". Jangan menghapus setiap elemen secara mekanis dengan PublishState "Exclude", karena jika tidak ada peringatan tentangnya, file mungkin tersedia pada waktu publikasi dan mungkin akhirnya dipublikasikan - yang akan menjadi perubahan produk yang tidak diinginkan selama Anda hanya menginginkannya singkirkan peringatan itu.

Jirka Hanika
sumber