Yayın modu yapısında XML belge dosyalarının kopyalanması nasıl engellenir?


86

Bazı üçüncü taraf bileşenlerine başvuran bir Visual Studio 2010 projem var. Derlemelerine, biz (ve sadece biz) geliştiriciler için yararlı olan XML belge dosyaları eşlik eder. Ve proje her oluşturulduğunda (Debug veya Release modlarında) bu XML dosyaları, yapı dizinine kopyalanır.

Visual Studio'da veya MSBuild'de bu XML dosyalarının derleme dizinine kopyasını devre dışı bırakacak bir ayar veya anahtar bulamıyorum. Derleme sonrası komut dosyası bir seçenek olabilir, ancak kokulu bir seçenek olabilir. Herhangi bir fikir? Teşekkür ederim.


1
Açık olmak gerekirse, referans ekle iletişim kutusunda bir montaja bir referans eklediniz. Şimdi, doc XML dosyalarını oluşturduğunuzda çıktı yolunuzda görünür mü?
İbrahim Haşimi

Yanıtlar:


115

Bir proje oluşturduğunuzda .xml / .pdb dosyaları ResolveAssemblyReference görevi aracılığıyla toplanır. ResolveAssemblyReference çağrıldığında, ilgili dosyalar için dosya uzantılarının bir listesi iletilir. Bu dosya uzantıları listesi, MSBuild özelliği AllowReferenceRelatedFileExtensions tarafından yakalanır . Varsayılan olarak bu liste ".pdb; .xml" içerecektir.

İlgili tüm referans dosyalarını alınmaktan hariç tutmak istiyorsanız, o zaman özelliğin değerini ilgili dosyaların uzantılarına sahip olmayacak bir şeye geçersiz kılın. Örneğin, AllowReferenceRelatedFileExtensions seçeneğini "-" olarak ayarlayabilirsiniz .

Ayrıca bununla döndürülen dosya listesini de özelleştirebilirsiniz. Yalnızca .pdb dosyalarını bulmak istiyorsanız, geçiş yapmanız gerekir AllowedReferenceRelatedFileExtensions=".pdb". Bu durumda .dll / .exe yanında .pdb dosyası olan tüm referanslar da kopyalanacaktır. Bunu, .pdb / .xml ile bitmeyen diğer ilgili dosyaları kopyalamak için de kullanabilirsiniz. Örneğin, MyAssembly.dll adında başvurulan bir derlemeniz varsa ve aynı klasörde MyAssembly.pdb ve MyAssembly.foo varsa, ayarlarsanız AllowedReferenceRelatedFileExtensions=".pdb;.foo"hem .pdb hem de .foo dosyası çıktı dizinine kopyalanacaktır.


Cevap bu. Çok teşekkür ederim!
Humberto

16
Buna bir cevap almanın 2 yıl sürmesi komik.
Ibrahim Hashimi

Bu konu hakkında 2 yıl önce yorum yaptığımı fark ettim, o zaman cevap vermediğim için üzgünüm :(
Sayed Ibrahim Hashimi

7
İşlemiyle ilgili ayrıntılar nasıl : Msbuild komut satırında bu belirtmek veya proje dosyasında stackoverflow.com/questions/2011434/...
yzorg

3
Visual Studio'nun neresinde AllowedReferenceRelatedFileExtensions?
Apostrofix

0

Visual studio proje dosyası, herhangi bir msbuild dosyasıyla aynı biçime sahiptir. Bu nedenle, yapılandırma adı 'Release' ise xml dosyalarınızı kopyalamamak için koşulu ilgili bölüme manuel olarak ekleyebilirsiniz.

Değişmeli

<ItemGroup>

-e

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

veya bunun gibi bir şey.


3
Bir Visual Studio projesi ve çözüm dosyası MSBuild dosyalarıdır.
AMissico

@AMissico Yanlış, çözüm dosyaları MSBuild dosyaları değil.
julealgon

Proje dosyası biçiminde (XML) olmasalar da, yine de bir destek MSBuild dosyasıdırlar. Ortam değişkeni ayarlama ( set MSBuildEmitSolution=1(veya özellik bağımsız değişkeni geçmesi p:msbuildemitsolution=1).
AMissico

-4

.Xml / .pdb yapı eylemi "İçerik" (vb.) Olarak işaretlenmişse, bunları "Yok" olarak değiştirebilirsiniz. Ayrıca, derlemeye-kopyala çıktısının yanlış olduğundan emin olmalısınız .

Bunların ikisi de hazır mı?


2
Ancak bunu yapmak için bunları proje öğeleri olarak eklemem gerekiyor ... yoksa yanılıyor muyum?
Humberto

Derleyiciden oluşturulan .PDB ve .XML dosyaları asla bir projeye dahil edilmemelidir, çünkü yinelemeli derleme hataları ve dosya kilitleme ile sonuçlanacaksınız.
Jamie Howarth

1
@codegecko "Yok" u gördünüz mü? intellisense vb. almak için kaynak dll'ye bitişik olmaları gerekir. Bununla ilgili bir sorunum hiç olmadı.
Marc Gravell

2
@codegecko çöp kutusu hakkında kim bir şey söyledi? Oradan atıfta bulunmam ... Genellikle a / lib'den dll, XML ve pdb ile başvururum.
Marc Gravell

1
Aaaaah, şimdi kuruş düştü, yanlış anladım. Bunları bir / lib klasörüne dahil etmek, VS'ye başvurmak, öğeleri bir çözüm klasörüne eklemek, çıktı türünü "Yok" olarak belirlemek - anladım. Aslında bunu kendi projelerimde kullanmaya başlayabilirim - teşekkürler!
Jamie Howarth

-5

Yayın yapılarında XML dosyalarının klasöre kopyalanması ile ilgili sorun nedir? Bana öyle geliyor ki, bu sorun değil ve asıl sorun, dosyaları yükleyiciye yerleştirmek için alan kodda. Üçüncü taraf dll'leri kendi bin \ release klasörünüzden almak bence iyi bir uygulama değil. Yükleyicimin kaynak ağacımdaki kendi klasörlerinden üçüncü taraf dll'leri almasını isterdim.


2
Sorun, bu dosyaların IntelliSense özelliğine yardımcı olmaktan başka bir işlevi olmamasıdır. Onları sürüm dosyalarına dahil etmenin bir anlamı yok. Ayrıca, dahil hiçbir yükleyici yok ...
Humberto

Peki uygulamanızı nasıl dağıtıyorsunuz?
Russell McClure

3
Bu yüzden benim çözümüm kopyalama komut dosyasını kopyalamak istemediğiniz dosyaları kopyalamayacak şekilde değiştirmek olacaktır.
Russell McClure

2
bu kesinlikle işe yarar. Ancak bu , dosyaların yapıda kopyalanmasını engelleyecek ideal bir çözüm değildir . Bu davranışın arkasındaki mantığı anlamaya çalışıyorum. Teşekkürler!
Humberto

4
İyi yazılmış XML belge dosyaları büyüktür. Bunları her yapıda kopyalamak SSD'min ömrünü kısaltıyor.
springy76

-5

Ayar, söz konusu projenin Özelliklerinde, "Oluştur" sekmesinin altında, "XML dokümantasyon dosyası" nın işaretini kaldırın. Ayrıca ,. * Proj dosyasındaki yapı yapılandırmanız <DocumentationFile>için geçerli <PropertyGroup>olan bir MSBuild özelliğidir .


3
Bu yanıt yanlış. Bir denetim satıcısından gelen önceden oluşturulmuş XML dosyalarını soruyor. Yanıtınız yalnızca kendi XML dosyalarınızı oluşturuyorsanız yardımcı olur.
Kevin Kalitowski

"Pdb".: Size <PropertyGroup> öğesinde .Csproj dosyasında bu ayarlayabilirsiniz görünüyor <AllowedReferenceRelatedFileExtensions> = "" </ AllowedReferenceRelatedFileExtensions>
Jay
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.