Czy mogę wykluczyć folder lub pliki podczas publikowania witryny sieci Web w programie Visual Studio 2005? Mam różne zasoby, które chcę mieć pod ręką w Eksploratorze rozwiązań, takie jak alternatywne pliki konfiguracyjne dla różnych środowisk, ale tak naprawdę nie chcę publikować ich na serwerze. Czy jest jakiś sposób, aby je wykluczyć? Korzystając z innych typów projektów, takich jak zespół .dll, mogę ustawić właściwość Akcji kompilacji pliku na „Brak”, a właściwość Kopiuj do katalogu wyjściowego na „Nie kopiuj”. Nie mogę znaleźć podobnych ustawień dla plików w witrynie internetowej.
Jeśli IDE nie oferuje tej funkcji, czy ktoś ma dobrą technikę obsługi takich plików?
visual-studio
visual-studio-2005
web-publishing
Jim Snyder
źródło
źródło
Odpowiedzi:
Jeśli możesz zidentyfikować pliki na podstawie rozszerzenia, możesz to skonfigurować za pomocą tagu buildproviders w pliku web.config . Dodaj rozszerzenie i zamapuj je na ForceCopyBuildProvider. Na przykład, aby skonfigurować kopiowanie plików .xml za pomocą akcji publikowania, należy wykonać następujące czynności:
Aby zapobiec kopiowaniu danego pliku, zrobiłbyś to samo, ale jako typ użyj System.Web.Compilation.IgnoreFileBuildProvider.
źródło
Wyklucz pliki i foldery, dodając elementy
ExcludeFilesFromDeployment
iExcludeFoldersFromDeployment
do pliku projektu (.csproj, .vbproj itp.). Będziesz musiał edytować plik w edytorze tekstu lub w programie Visual Studio, zwalniając projekt, a następnie edytując go.Dodaj tagi w dowolnym miejscu odpowiedniego
PropertyGroup
(debugowania, wydania itp.), Jak pokazano poniżej:Obsługiwane są symbole wieloznaczne.
Aby wyjaśnić powyższy przykład:
ExcludeFilesFromDeployment
wykluczaFile1.aspx
(w katalogu głównym projektu) iFolder2\File2.aspx
(Folder2
jest w katalogu głównym projektu)ExcludeFilesFromDeployment
wyklucza wszystkie pliki w dowolnym nazwanym folderze.svn
i wszystkich jego podfolderachExcludeFoldersFromDeployment
Wyklucza foldery o nazwachFolder1
(w głównym katalogu projektu) iFolder2\Folder2a
(Folder2
znajduje się w katalogu głównym projektu)Aby uzyskać więcej informacji, zobacz wpis w blogu MSDN Wdrażanie w sieci Web: wykluczanie plików i folderów za pośrednictwem pliku projektu aplikacji sieci Web
źródło
O dziwo, odpowiedzi na Visual Studio 2012 nie ma tutaj:
Odpowiedź z zielonym znacznikiem wyboru nie jest odpowiedzią.
Najwyższa „ulepszona” odpowiedź odnosi się do artykułu z 2010 roku i mówi, że musisz edytować plik projektu csproj, który jest teraz nieprawidłowy. Dodałem ExcludeFoldersFromDeployment element XML do mojego pliku csproj programu Visual Studio 2012 i nic to nie dało, element został uznany za nieprawidłowy, ponieważ ExcludeFoldersFromDeployment został przeniesiony do pliku .pubxml, na który wygląda.
W przypadku aplikacji i witryn internetowych edytujesz plik .pubxml!
Możesz skorzystać z mojej odpowiedzi lub wypróbować ten przewodnik, który znalazłem później: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure- on-iis-and-skip-deleting-it-with-msdeployskiprules.html # sthash.MSsQD8U1.dpbs
Tak, możesz to zrobić nie tylko w przypadku projektów witryn internetowych, ale także witryn internetowych. Spędziłem dużo czasu w Internecie, szukając tej nieuchwytnej możliwości wykluczania za pomocą witryny Visual Studio (NIE projektu witryny internetowej) i wcześniej stwierdziłem, że nie jest to możliwe, ale wygląda na to, że:
W pliku [mypublishwebsitename] .pubxml, znajdującym się w ~ / Properties / PublishProfiles for Web Application Projects i ~ / App_Data / PublishProfiles for Websites, po prostu dodaj:
jako dzieci do głównego
<PropertyGroup>
elementu w pliku .pubxml. Nie ma potrzeby dodawania nowego elementu, chyba że kluczem jest określony typ kompilacji, taki jak wydanie lub debugowanie.ALE POCZEKAJ!!!
Jeśli usuwasz pliki z serwera docelowego / docelowego z następującymi ustawieniami w konfiguracji publikowania:
Następnie proces publikowania w sieci Web usunie z serwera źródłowego / docelowego wszystko, co zostało wykluczone, na przykład element, który nakreśliłeś w swoim
<ExcludeFoldersFromDeployment>
i<ExcludeFilesFromDeployment>
!MsDeploy Skip Rules to ratunek:
Po pierwsze, Web Publish używa do publikowania czegoś innego niż MSBuild (zwanego Task IO lub czegoś podobnego), ale zawiera błąd i nie rozpoznaje reguł pomijania, więc musisz dodać do swojego .pubxml:
Chciałbym zachować
<WebPublishMethod>
swój własny<PropertyGroup>
, można by pomyśleć, że możesz mieć tylko jeden<PropertyGroup>
element w swoim .pubxml, ale moje reguły pomijania nie były wywoływane, dopóki nie przeniosłem się<WebPublishMethod>
do ich własnego<PropertyGroup>
elementu. Tak, szalone, ale fakt, że musisz to wszystko zrobić, aby Web Publish wykluczył, a także nie usunął folderu / pliku na serwerze, jest szalony.Teraz moje rzeczywiste deklaracje SkipRules, ExcludeFolders i ExcludeFiles w moim .pubxml:
A teraz Reguły pomijania (
<Target>
jest elementem podrzędnym<Project>
w twoim .pubxml): ( Możesz zostawić<SkipAction>
puste pole Pomiń dla wszystkich działań, ale nie testowałem tego i nie jestem pewien.I proszę, nie zapomnij o ucieczce przed
.
regułą pomijania ścieżki w pliku z ukośnikiem odwrotnym.źródło
Zmagałem się z tym samym problemem i ostatecznie pociągnąłem za spust podczas konwersji strony internetowej do aplikacji internetowej. Kiedy to zrobiłem, uzyskałem wszystkie korzyści z IDE, takie jak akcja kompilacji, i skompilowałem się szybciej do rozruchu (koniec z walidacją strony internetowej ...).
Krok 1: Przekształć swoją „witrynę internetową” w „aplikację internetową”. Aby go przekonwertować, właśnie utworzyłem nową „aplikację internetową”, usunąłem wszystkie pliki, które utworzyła automatycznie, a następnie skopiowałem i wkleiłem moją witrynę internetową. To działało dobrze. Pamiętaj, że pliki raportów będą musiały mieć ustawioną Akcję budowania na „Treść” zamiast „Brak”.
Krok 2: Teraz możesz ustawić właściwość „Build Action” dowolnych plików.
Mam nadzieję że to pomoże.
źródło
W Visual Studio 2013 znalazłem odpowiedź Keitha, dodając rozszerzenie
ExcludeFoldersFromDeployment
elementu do pliku projektu, nie zadziałało (nie przeczytałem odpowiedzi Briana Ogdena, która to mówi). Jednak stwierdziłem, że mogę wykluczyć plik tekstowy podczas publikowania w programie Visual Studio 2013, ustawiając po prostu następujące właściwości w samym pliku tekstowym:1) Akcja budowy: brak
2) Kopiuj do katalogu wyjściowego: Nie kopiuj
Początkowo próbowałem samodzielnie ustawić właściwość Kopiuj do katalogu wyjściowego, ale to nie zadziałało, gdy akcja kompilacji została ustawiona na wartość domyślną, zawartość. Kiedy następnie ustawiłem akcję kompilacji na Brak, plik tekstowy nie był już kopiowany do folderu docelowego podczas publikacji.
Aby wyświetlić te właściwości w graficznym interfejsie użytkownika programu Visual Studio, w Eksploratorze rozwiązań kliknij prawym przyciskiem myszy plik, który chcesz wykluczyć, i wybierz Właściwości z menu kontekstowego.
źródło
Myślę, że masz tutaj tylko dwie opcje:
Przeszedłem już przez to i nie mogłem wymyślić nic naprawdę eleganckiego.
źródło
W przypadku programu Visual Studio 2017, WebApp Publish , najpierw utwórz standardowy profil publikowania systemu plików. Przejdź do folderu App_Data \ PublishProfiles \ i edytuj plik [nazwa profilu] .pubxml.
Dodaj
pod tagiem
<PropertyGroup>
Możesz określić ten tag tylko raz, w przeciwnym razie przyjmie on tylko ostatnie wartości.Przykład:
Upewnij się, że tag DeleteExistingFiles ma wartość False
źródło
Funkcja, której szukasz, istnieje, jeśli projekt został utworzony jako „aplikacja internetowa”. „Projekty” witryny sieci Web to po prostu zbiór plików, które są traktowane jako 1: 1, z tym, co jest wdrażane na serwerze sieci Web.
Pod względem funkcjonalności oba są takie same, jednak aplikacja internetowa kompiluje cały kod źródłowy do biblioteki DLL, zamiast kopiowania nagich plików kodu źródłowego na serwer sieciowy i kompilacji w razie potrzeby.
źródło
To tylko dodatek do innych pomocnych odpowiedzi tutaj i coś, co uznałem za przydatne ...
Używanie wpp.targets do wykluczonych plików i folderów
W przypadku wielu wdrożeń dla różnych środowisk warto mieć tylko jeden wspólny plik, w którym można ustawić wszystkie wykluczone pliki i foldery. Możesz to zrobić, tworząc
*.wpp.targets
plik w katalogu głównym projektu, jak w przykładzie poniżej.Aby uzyskać więcej informacji, zobacz ten przewodnik firmy Microsoft:
Instrukcje: edytowanie ustawień wdrażania w plikach profilu publikowania (.pubxml) i pliku .wpp.targets w projektach sieci Web programu Visual Studio
źródło
W programie Visual Studio 2017 (w moim przypadku 15.9.3) manipulacja plikiem .csproj działa naprawdę dobrze! Nie ma potrzeby modyfikowania pliku pubxml.
Następnie możesz skonstruować całkiem ładne ustawienia w pliku .csproj, używając warunku PropertyGroup, np .:
wyklucza folder „Samples” ze wszystkich wdrożeń z konfiguracjami zaczynającymi się od „Pub _” ...
źródło
Jako współczesna odpowiedź, w programie Visual Studio 2017 z witryną .net core:
Możesz wykluczyć z publikowania w ten sposób w csproj, gdzie CopyToPublishDirectory nigdy nie jest.
Bardziej szczegółowo omówiono to tutaj: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2
Wydaje mi się, że wcześniejsze sugestie nie zadziałały, ponieważ Visual Studio używa teraz innego mechanizmu publikowania pod spodem, zakładam, że za pośrednictwem narzędzia CLI „dotnet Publishing” lub jego odpowiednika.
źródło