Bir .csproj dosyasında, <None Include = “…”> ne işe yarar?


137

Nasıl

<None Include="C:\foo.bar" />

dan farklı

<Content Include="C:\foo.bar" />

?


7
Birkaç Contents ile değiştirildi None. Razor'a dönüştürürken dosyaları .ascx'den .cshtml'ye yeniden adlandırdığımda oldu. Bunları manuel olarak değiştirmek, sahip olduğum bazı dağıtım sorunlarını düzeltti. Bunu bulduğuma sevindim.
Chris

Yanıtlar:


135

Build action özelliğindeki MSDN makalesi farklılıkları açıklar.

Yok - Dosya proje çıktı grubuna dahil değildir ve derleme işleminde derlenmez. Örnek olarak Benioku dosyası gibi belgeler içeren bir metin dosyası verilebilir.

İçerik - Dosya derlenmez, ancak İçerik çıktı grubuna dahil edilir. Örneğin, bu ayar .htm veya başka türde bir Web dosyası için varsayılan değerdir.


5
Teşekkürler, bu referansı bulmakta sorun yaşadım.
Emmett

Yararlı, ancak dosya çıktıya eklenmeyecekse neden "Yok" öğesinin var? Amaç ne?
JimH44

1
@ JimH44 <Hiçbiri> öğesi, varsayılan olarak çıktı grubunda bulunmasalar bile, dosyaları özellikle çıkış dizinine kopyalamak için kullanılır . <Yok> dosyası için "Çıktı Dizine Kopyala" -> "Her Zaman Kopyala" yı seçerseniz, bu dosyanın kopyalanmasına neden olur ve projenin .csproj dosyasına eklenen girdinin bir <Yok> girişi olacağını görürsünüz. dosya için.
Göze Çarpan Derleyici

3
Öyleyse, "Çıktı Dizine Kopyala" -> "Her Zaman Kopyala" içeren bir <Yok> dosyası ile "Çıktı Dizinine Kopyala" -> "Her Zaman Kopyala" içeren bir <İçerik> dosyası arasındaki fark nedir?
hashtable

30

Farklardan biri nasıl yayınlandıklarıdır; "Hiçbiri" öğeleri bir yayına dahil edilmez, "İçerik" öğeleri eklenir; örneğin, Yayınla sekmesindeki "Uygulama Dosyaları" iletişim kutusunda.


8
Doğru değil. En azından yeni nokta net cli. bir CopyToOutputDirectoryküme ile Yok olarak bildirilen bir öğeniz varsa, bir truedotnet publish
diskte

13

% 100 emin değilim ( Build Action özelliğinin MSDN açıklamasını okudum ), ancak bu yanıtı MSDN'den StackOverflow'a kopyalamak soruyu tamamen benim için cevaplamıyor.

Hiçbiri ve İçerik arasındaki farkın yalnızca Web projeleri üzerinde etkisi vardır. Bir komut satırı projesi, WinForm projesi veya UnitTest projesi (benim durumumda) vb. İçin . Hiçbiri ve İçeriğin farklı davranışı yoktur.

MSDN: "proje çıktı grubu" veya "İçerik çıktı grubu" yalnızca bir Web projesinde kullanılan terimler, değil mi?


2
Dediğiniz gibi, Nonevs vs Contentsadece oluşturma adımı için değil yayınlama adımı için etkisi vardır . Derleme adımı için her ikisi de ayarlanabilir ve bu dosyanın derleme adımı tarafından kopyalanıp kopyalanmadığını kontrol eder. Ayrıca varsayılan olarak T4 şablonlarının öğe olarak değil, öğe olarak eklenmesi tuhaf görünüyor . CopyToOutputDirectoryContentNone
Christopher King

8

Benim durumumda, MSBuild dosyam ItemGroupaşağıdaki gibi görünen bir görüntü kaynakları vardı :

  <ItemGroup>
    <Content Include="Resources\image001.png" />
    <Content Include="Resources\image002.png" />
    <Content Include="Resources\image003.png" />
    <Content Include="Resources\image004.png" />
    <None Include="Resources\image005.png" />
    <None Include="Resources\image006.png" />
    <None Include="Resources\image007.png" />
  </ItemGroup>

Projem iyi bir şekilde inşa edilirken, bu benim neden ürünümün Contentve Noneöğe türü öğelerinin bir karışımının olduğunu merak etmeme neden oldu ItemGroup. Bu MSDN makalesi (Visual Studio 2010 için) aradığım rehberliği verdi:

Kaynak editörü bir görüntü ekler, bunun ayarladığı Not Eylem kurmak için Hiçbiri , .resx dosyası referanslar nedeniyle görüntü dosyasını. Derleme sırasında, görüntü .resx dosyasından oluşturulan .resources dosyasına çekilir. Ardından resme, .resx dosyası için otomatik olarak oluşturulan güçlü yazılan sınıf aracılığıyla kolayca erişilebilir. Bu nedenle, bu ayarı Katıştırılmış Kaynak olarak değiştirmemelisiniz , çünkü bunu yapmak görüntüyü montajda iki kez içerecektir.

Çözüm: Bu kılavuzda bir metin düzenleyicisi kullanarak Contentöğe türü öğelerini olarak değiştirdim None.

Ayrıca, MSBuild öğelerine genel bir bakış için bu MSDN makalesine bakın .


3

Hiçbir derlenebilir öğeler içeren bir proje var (yasemin birim testleri için html ve javascript depolar).

Bir gün benim çözümüm (adı geçen projeyi içeren) "Projede" Yapı "hedefi yok" diyerek derlemeyi bıraktı.

Derleyiciyi getirmek için bir içe aktarma ekledim, bu da makinemde iyi çalıştı, ancak yapı sunucusunda msbuild kullanarak başarısız oldu.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Sonra bir satırı değiştirdim

<None Include="SpecRunner.html" />

için

<Content Include="SpecRunner.html" />

ve yapı sunucusunda da çalıştı.


2

.Vstemplate'te tanımladığınız dosyaları dahil etmek için bir şablon proje dosyasında Hiçbirine ihtiyacınız yoktur, aksi takdirde oluşturma ve çeviri işleminde kaybolurlar. Her şeyi oluşturmak için kullandığı geçici klasörde geride kalırlar ve kısa bir süre sonra silinirler.


1

Benim durumumda .Pubxml Hiçbiri arasında bu dosyalardan biridir listesi . Çözüm oluşturma veya web projesi için statik bir dosya olarak tasarlanmamıştır. Ancak siteyi Azure'da yayınlamak için yapılandırmalar burada mevcuttur.

Microsoft makalesine göre bunlar .csproj dosya etiketleri arasında gördüğümüz başlıca türlerdir :

Yok - Dosya proje çıktı grubuna dahil değildir ve derleme işleminde derlenmez. Örnek olarak Benioku dosyası gibi belgeler içeren bir metin dosyası verilebilir.

Derle - Dosya derleme çıktısında derlenir. Bu ayar kod dosyaları için kullanılır.

İçerik - Dosya derlenmez, ancak İçerik çıktı grubuna dahil edilir. Örneğin, bu ayar .htm veya başka türde bir Web dosyası için varsayılan değerdir.

Katıştırılmış Kaynak - Bu dosya, ana proje oluşturma çıktısına DLL veya yürütülebilir olarak katıştırılır. Genellikle kaynak dosyaları için kullanılır.


1
Lütfen bu konuda yorum yapın, eğer bir şey yanıltıcıysa veya net değilse, Aşağı oylama daha iyi olmamı sağlamaz. Şimdiden teşekkürler.
krishna kanth

1
Sık sık hata alıyorum: "Properties \ PublishProfiles \ FolderProfile.pubxml" için "None" öğe adı "Content" olmalıdır. Bambu üzerindeki Asp.Net
projemde

Merhaba @BochenLin, burada bahsettiğiniz ayrıntılar biraz yetersiz, burada daha fazla ayrıntı vermeye çalışabilir veya mümkünse tam sorun ayrıntıları ve ekran görüntüsü ile yeni bir soru gönderebilirsiniz [ve ardından soru bağlantısını burada paylaşın].
krishna kanth

0

İçerik dosyaları bir derlemeye dahil değildir, ancak bir yayına dahil edilir.

Sizin tarafınızdan bu şekilde yapılandırılmadığı sürece hiçbir dosya bir derlemeye veya yayınlamaya dahil edilmez. Örneğin, "Her Zaman" veya "Daha Yeni" bir "Çıktı Dizine Kopyala" ayarı, bunların hem derlemeye hem de yayınlamaya eklenmesine neden olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.