Jak zapobiec kopiowaniu plików dokumentacji XML w kompilacji w trybie wydania?

86

Mam projekt Visual Studio 2010, który zawiera odniesienia do niektórych składników innych firm. Ich zespołom towarzyszą pliki dokumentacji XML, które są przydatne dla nas (i tylko dla nas) programistów. Za każdym razem, gdy projekt jest budowany (w trybie debugowania lub wydania), te pliki XML są kopiowane do katalogu kompilacji.

Nie mogę znaleźć ustawienia lub przełączenia, aby wyłączyć kopiowanie tych plików XML do katalogu kompilacji, ani w programie Visual Studio, ani w programie MSBuild. Skrypt po kompilacji może być opcją, ale śmierdzącą. Jakieś pomysły? Dziękuję Ci.

Humberto
źródło
1
Dla jasności dodano odniesienie do zespołu w oknie dialogowym dodawania odniesienia. Teraz, kiedy tworzysz doc, pliki XML pojawiają się w ścieżce wyjściowej?
Ibrahim Hashimi

Odpowiedzi:

115

Podczas tworzenia projektu pliki .xml / .pdb są gromadzone za pośrednictwem zadania ResolveAssemblyReference. Gdy wywoływana jest ResolveAssemblyReference, przekazywana jest lista rozszerzeń plików dla powiązanych plików. Ta lista rozszerzeń plików jest przechwytywana we właściwości MSBuild AllowedReferenceRelatedFileExtensions . Domyślnie ta lista będzie zawierać „.pdb; .xml”.

Jeśli chcesz wykluczyć wszystkie powiązane pliki referencyjne z pobierania, po prostu nadpisz wartość właściwości na coś, czego powiązane pliki nie będą miały rozszerzeń. Na przykład można ustawić AllowedReferenceRelatedFileExtensions na „-”.

Możesz także dostosować listę plików, które są przez to zwracane. Jeśli chcesz znaleźć tylko pliki .pdb, musisz przekazać AllowedReferenceRelatedFileExtensions=".pdb". W takim przypadku wszelkie odniesienia, które mają plik .pdb obok .dll / .exe, również zostaną skopiowane. Możesz również użyć tego do skopiowania innych powiązanych plików, których nazwa może nie kończyć się na .pdb / .xml. Na przykład, jeśli masz zestaw, do którego istnieje odniesienie o nazwie, MyAssembly.dll iw tym samym folderze istnieje MyAssembly.pdb i MyAssembly.foo. Jeśli ustawisz, AllowedReferenceRelatedFileExtensions=".pdb;.foo"zarówno plik .pdb, jak i .foo zostaną skopiowane do katalogu wyjściowego.

Sayed Ibrahim Hashimi
źródło
To jest odpowiedź. Dziękuję Ci bardzo!
Humberto,
16
To zabawne, że odpowiedź na to pytanie zajęła 2 lata.
Ibrahim Hashimi,
Właśnie zdałem sobie sprawę, że skomentowałem to 2 lata temu, przepraszam, że wtedy nie odpowiadałem :(
Sayed Ibrahim Hashimi
7
Szczegółowe informacje o tym, jak określić to w wierszu poleceń msbuild lub w pliku projektu: stackoverflow.com/questions/2011434/…
yzorg,
3
Gdzie w Visual Studio możemy zmienić AllowedReferenceRelatedFileExtensions?
Apostrofix
0

Plik projektu programu Visual Studio ma ten sam format, co każdy plik msbuild. Możesz więc ręcznie dodać warunek do odpowiedniej sekcji, aby nie kopiować plików xml, jeśli nazwa konfiguracji to „Release”.

Powinno się zmieniać

<ItemGroup>

do

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

lub coś w tym stylu.

Alex
źródło
3
Projekt programu Visual Studio i plik rozwiązania SĄ plikami MSBuild.
AMissico
@AMissico Źle, pliki rozwiązań nie są plikami MSBuild.
julealgon
Chociaż nie są w formacie pliku projektu (XML), nadal są plikiem obsługi programu MSBuild. Ustaw zmienną środowiskową ( set MSBuildEmitSolution=1lub przekaż argument właściwości ( p:msbuildemitsolution=1).
AMissico,
-4

Jeśli pliki .xml / .pdb są oznaczone jako akcja kompilacji „Treść” (itp.), Możesz je zmienić na „Brak”. Powinieneś również upewnić się, że dane wyjściowe kopiowania do kompilacji są fałszywe .

Czy oba te elementy są ustawione?

Marc Gravell
źródło
2
Ale żeby to zrobić, musiałbym dodać je jako elementy projektu ... czy się mylę?
Humberto
Pliki .PDB i .XML wygenerowane przez kompilator nigdy nie powinny być dołączane do projektu, ponieważ w rezultacie pojawią się rekurencyjne błędy kompilacji i blokowanie plików.
Jamie Howarth
1
@codegecko, czy widziałeś „Brak”? muszą znajdować się w sąsiedztwie źródła dll, aby uzyskać intelisense itp. Nigdy nie miałem z tym problemu.
Marc Gravell
2
@codegecko, kto powiedział coś o koszu? Nie odwoływałbym się z tego miejsca ... Zwykle odwołuję się do / lib, z biblioteką dll, XML i pdb.
Marc Gravell
1
Aaaaah, teraz grosz spadł, źle zrozumiałem. Umieszczanie ich w folderze / lib, odwoływanie się do VS, dodawanie elementów do folderu rozwiązania, określanie typu wyjścia jako „Brak” - udało się. Mogę zacząć używać tego w moich własnych projektach - dzięki!
Jamie Howarth
-5

Jaki jest problem z kopiowaniem plików XML do folderu podczas kompilacji wydania? Wydaje mi się, że to jest w porządku, a prawdziwy problem dotyczy kodu, który pobiera pliki, aby umieścić je w instalatorze. Moim zdaniem pobieranie plików DLL innych firm z własnego folderu bin \ release nie jest dobrą praktyką. Chciałbym, aby mój instalator pobrał pliki DLL innych firm z własnego folderu w moim drzewie źródłowym.

Russell McClure
źródło
2
Problem polega na tym, że te pliki nie pełnią żadnej funkcji poza wspomaganiem funkcji IntelliSense. Nie ma sensu dołączać ich do plików wydania. Poza tym nie ma instalatora ...
Humberto
Jak więc wdrażasz swoją aplikację?
Russell McClure
3
Więc moim rozwiązaniem byłoby zmodyfikowanie skryptu kopiowania, aby nie kopiować plików, których nie chcesz kopiować.
Russell McClure
2
to na pewno zadziała. Nie jest to jednak idealne rozwiązanie, które uniemożliwiłoby skopiowanie plików w kompilacji. Próbuję zrozumieć logikę tego zachowania. Dzięki!
Humberto,
4
Dobrze napisane pliki dokumentacji XML są duże. Kopiowanie ich w każdej kompilacji skraca żywotność mojego dysku SSD.
springy76
-5

To ustawienie znajduje się we właściwościach danego projektu, na karcie „Kompilacja” odznacz opcję „Plik dokumentacji XML”. Jest to również właściwość programu MSBuild o nazwie <DocumentationFile>w ramach odpowiedniej <PropertyGroup>dla konfiguracji kompilacji w pliku. * Proj.

Jamie Howarth
źródło
3
Ta odpowiedź jest niedokładna. Pyta o wstępnie wygenerowane pliki XML, które pochodzą od dostawcy kontroli. Twoja odpowiedź jest pomocna tylko wtedy, gdy generujesz własne pliki XML.
Kevin Kalitowski
Wygląda na to, że możesz to ustawić w pliku .csproj w elemencie <PropertyGroup>: <AllowedReferenceRelatedFileExtensions> ".pdb". = "" </AllowedReferenceRelatedFileExtensions>
Jay