Wykluczanie plików i folderów z wdrożenia

Autor: Jason Lee

W tym temacie opisano sposób wykluczania plików i folderów z pakietu wdrażania sieci Web podczas kompilowania i tworzenia projektu aplikacji internetowej.

Ten temat stanowi część serii samouczków opartych na wymaganiach dotyczących wdrażania przedsiębiorstwa fikcyjnej firmy o nazwie Fabrikam, Inc. W tej serii samouczków użyto przykładowego rozwiązania — rozwiązania Contact Manager — do reprezentowania aplikacji internetowej o realistycznym poziomie złożoności, w tym aplikacji ASP.NET MVC 3, usługi Windows Communication Foundation (WCF) i projektu bazy danych.

Metoda wdrażania w centrum tych samouczków jest oparta na metodzie podzielonego pliku projektu opisanego w artykule Understanding the Project File (Opis pliku projektu), w którym proces kompilacji jest kontrolowany przez dwa pliki projektu — jeden zawierający instrukcje kompilacji, które mają zastosowanie do każdego środowiska docelowego, oraz jeden zawierający ustawienia kompilacji i wdrażania specyficzne dla środowiska. W czasie kompilacji plik projektu specyficzny dla środowiska jest scalony z plikiem projektu niezależnego od środowiska w celu utworzenia pełnego zestawu instrukcji kompilacji.

Omówienie

Podczas kompilowania projektu aplikacji internetowej w programie Visual Studio 2010 potok publikowania sieci Web (WPP) umożliwia rozszerzenie tego procesu kompilacji przez pakowanie skompilowanej aplikacji internetowej do wdrażalnego pakietu internetowego. Następnie można użyć internetowego narzędzia wdrażania sieci Web (IIS) (Web Deploy) w celu wdrożenia tego pakietu internetowego na zdalnym serwerze sieci Web usług IIS lub zaimportować pakiet internetowy ręcznie za pomocą Menedżera usług IIS. Ten proces pakowania jest objaśniony w temacie Kompilowanie i pakowanie projektów aplikacji internetowych.

Jak więc kontrolować, co zostanie uwzględnione w pakiecie internetowym? Ustawienia projektu w programie Visual Studio za pośrednictwem bazowego pliku projektu zapewniają wystarczającą kontrolę dla wielu scenariuszy. Jednak w niektórych przypadkach możesz dostosować zawartość pakietu internetowego do określonych środowisk docelowych. Możesz na przykład dołączyć folder dla plików dziennika podczas wdrażania aplikacji w środowisku testowym, ale wykluczyć folder podczas wdrażania aplikacji w środowisku przejściowym lub produkcyjnym. W tym temacie pokazano, jak to zrobić.

Co jest domyślnie uwzględniane?

Podczas konfigurowania właściwości projektu aplikacji internetowej w programie Visual Studio lista Elementy do wdrożenia na stronie Pakiet/Publikowanie w sieci Web umożliwia określenie elementów, które mają zostać uwzględnione w pakiecie wdrażania sieci Web. Domyślnie jest ona ustawiona na tylko pliki potrzebne do uruchomienia tej aplikacji.

Domyślnie jest ona ustawiona na tylko pliki potrzebne do uruchomienia tej aplikacji.

Po wybraniu opcji Tylko pliki potrzebne do uruchomienia tej aplikacji program WPP spróbuje określić, które pliki powinny zostać dodane do pakietu internetowego. Obejmuje on:

  • Wszystkie dane wyjściowe kompilacji dla projektu.
  • Wszystkie pliki oznaczone akcją kompilacji zawartości.

Uwaga

Logika określająca, które pliki do uwzględnienia znajdują się w tym pliku:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

Wykluczanie określonych plików i folderów

W niektórych przypadkach potrzebujesz bardziej szczegółowej kontroli nad tym, które pliki i foldery są wdrażane. Jeśli wiesz, które pliki chcesz wykluczyć przed upływem czasu, a wykluczenie dotyczy wszystkich środowisk docelowych, możesz po prostu ustawić akcję kompilacji każdego pliku na Wartość Brak.

Aby wykluczyć określone pliki z wdrożenia

  1. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy plik, a następnie kliknij polecenie Właściwości.
  2. W oknie Właściwości w wierszu Akcja kompilacji wybierz pozycję Brak.

Jednak takie podejście nie zawsze jest wygodne. Na przykład możesz chcieć różnić, które pliki i foldery są uwzględniane zgodnie ze środowiskiem docelowym i poza programem Visual Studio. Na przykład w przykładowym rozwiązaniu Contact Manager przyjrzyj się zawartości projektu ContactManager.Mvc:

Zawartość projektu ContactManager.Mvc.

  • Folder Wewnętrzny zawiera skrypty SQL używane przez dewelopera do tworzenia, upuszczania i wypełniania lokalnych baz danych do celów programistycznych. Nic w tym folderze nie powinno być wdrażane w środowisku przejściowym lub produkcyjnym.
  • Folder Scripts zawiera kilka plików JavaScript. Wiele z tych plików jest dołączonych wyłącznie do obsługi debugowania lub zapewnienia funkcji IntelliSense w programie Visual Studio. Niektóre z tych plików nie powinny być wdrażane w środowiskach przejściowych ani produkcyjnych. Możesz jednak wdrożyć je w środowisku testowym dewelopera, aby ułatwić rozwiązywanie problemów.

Chociaż można manipulować plikami projektu, aby wykluczyć określone pliki i foldery, istnieje łatwiejszy sposób. Program WPP zawiera mechanizm wykluczania plików i folderów przez kompilowanie list elementów o nazwie ExcludeFromPackageFolders i ExcludeFromPackageFiles. Ten mechanizm można rozszerzyć, dodając własne elementy do tych list. Aby to zrobić, należy wykonać następujące kroki wysokiego poziomu:

  1. Utwórz niestandardowy plik projektu o nazwie [nazwa projektu].wpp.targets w tym samym folderze co plik projektu.

    Uwaga

    Plik .wpp.targets musi znajdować się w tym samym folderze co plik projektu aplikacji internetowej — na przykład ContactManager.Mvc.csproj — a nie w tym samym folderze co pliki projektów niestandardowych używanych do kontrolowania procesu kompilacji i wdrażania.

  2. W pliku .wpp.targets dodaj element ItemGroup .

  3. W elemencie ItemGroup dodaj elementy ExcludeFromPackageFolders i ExcludeFromPackageFiles , aby wykluczyć określone pliki i foldery zgodnie z potrzebami.

Jest to podstawowa struktura tego pliku .wpp.targets :

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

Należy pamiętać, że każdy element zawiera element metadanych elementu o nazwie FromTarget. Jest to opcjonalna wartość, która nie ma wpływu na proces kompilacji; po prostu służy do wskazania, dlaczego określone pliki lub foldery zostały pominięte, jeśli ktoś przegląda dzienniki kompilacji.

Wykluczanie plików i folderów z pakietu sieci Web

W następnej procedurze pokazano, jak dodać plik .wpp.targets do projektu aplikacji internetowej oraz jak za pomocą pliku wykluczyć określone pliki i foldery z pakietu internetowego podczas kompilowania projektu.

Aby wykluczyć pliki i foldery z pakietu wdrażania sieci Web

  1. Otwórz rozwiązanie w programie Visual Studio 2010.

  2. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł projektu aplikacji internetowej (na przykład ContactManager.Mvc), wskaż polecenie Dodaj, a następnie kliknij pozycję Nowy element.

  3. W oknie dialogowym Dodawanie nowego elementu wybierz szablon Plik XML .

  4. W polu Nazwa wpisz [nazwa projektu].wpp.targets (na przykład ContactManager.Mvc.wpp.targets), a następnie kliknij przycisk Dodaj.

    W polu Nazwa wpisz nazwę projektu.wpp.targets, a następnie kliknij przycisk Dodaj.

    Uwaga

    Jeśli dodasz nowy element do węzła głównego projektu, plik zostanie utworzony w tym samym folderze co plik projektu. Możesz to sprawdzić, otwierając folder w Eksploratorze Windows.

  5. W pliku dodaj element Project i element ItemGroup :

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>    
      </ItemGroup>
    </Project>
    
  6. Jeśli chcesz wykluczyć foldery z pakietu internetowego, dodaj element ExcludeFromPackageFolders do elementu ItemGroup :

    1. W atrybucie Include podaj rozdzieloną średnikami listę folderów, które chcesz wykluczyć.

    2. W elemecie metadanych FromTarget podaj zrozumiałą wartość, aby wskazać, dlaczego foldery są wykluczone, podobnie jak nazwa pliku .wpp.targets .

      <ExcludeFromPackageFolders Include="Internal">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFolders>
      
  7. Jeśli chcesz wykluczyć pliki z pakietu internetowego, dodaj element ExcludeFromPackageFiles do elementu ItemGroup :

    1. W atrybucie Include podaj rozdzieloną średnikami listę plików, które chcesz wykluczyć.

    2. W elemecie metadanych FromTarget podaj zrozumiałą wartość, aby wskazać, dlaczego pliki są wykluczone, podobnie jak nazwa pliku .wpp.targets .

      <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFiles>
      
  8. Plik [nazwa projektu].wpp.targets powinien teraz wyglądać podobnie do następującego:

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>   
        <ExcludeFromPackageFolders Include="Internal">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFolders>
        <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-
    vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFiles>
      </ItemGroup>
    </Project>
    
  9. Zapisz i zamknij plik [nazwa projektu].wpp.targets .

Następnym razem, gdy skompilujesz i spakujesz projekt aplikacji internetowej, program WPP automatycznie wykryje plik .wpp.targets . Wszystkie określone pliki i foldery nie zostaną uwzględnione w pakiecie internetowym.

Podsumowanie

W tym temacie opisano sposób wykluczania określonych plików i folderów podczas tworzenia pakietu internetowego przez utworzenie niestandardowego pliku .wpp.targets w tym samym folderze co plik projektu aplikacji internetowej.

Dalsze informacje

Aby uzyskać więcej informacji na temat używania niestandardowych plików projektu Microsoft Build Engine (MSBuild) do kontrolowania procesu wdrażania, zobacz Opis pliku projektu i Opis procesu kompilacji. Aby uzyskać więcej informacji na temat procesu tworzenia i wdrażania pakietów internetowych, zobacz Tworzenie i pakowanie projektów aplikacji internetowych, Konfigurowanie parametrów wdrażania pakietów internetowych i wdrażanie pakietów internetowych.