Jak uruchomić funkcję publikowania w Visual Studio, aby dołączać pliki ze zdarzenia post build?

Obecnie próbuję użyć funkcji "Publikuj" i MSDeploy Visual Studio 2010 do obsługi moich potrzeb wdrażania sieci Web, ale napotkałem przeszkodę w dostosowywaniu pakietu w zależności od mojej konfiguracji kompilacji.

Rozwijam się w środowisku 32-bitowym, ale muszę utworzyć pakiet release Dla środowiska 64-bitowego, więc w konfiguracji 'Release' mam Zdarzenie post build, które kopiuje 64-bitową wersję biblioteki dll innej firmy do katalogu bin nadpisanie wersji 32bit. Kiedy używam funkcji "Publikuj", mimo że poprawna 64-bitowa biblioteka dll jest kopiowana do katalogu bin, nie jest dołączana do pakietu.

Czy istnieje sposób, aby 'Publish' zawierał pliki, które zostały skopiowane do katalogu bin podczas zdarzenia post build?

Author: brodie, 2010-06-29

6 answers

Odpowiedziałem na podobne, ale inne pytanie na Jak dołączyć dodatkowe pliki za pomocą pakietów VS2010 Web deployment?.

W Twoim scenariuszu używasz zdarzenia post build, zalecałbym porzucenie zdarzenia post build i zaimplementowanie swoich działań przy użyciu własnych celów MSBuild zamiast zdarzenia post build. Poniżej znajdziesz tekst drugiej odpowiedzi.


From: Jak dołączyć dodatkowe pliki przy użyciu VS2010 Web deployment paczki?


Świetne pytanie. Właśnie opublikowałem bardzo szczegółowy wpis na blogu na Web Deploy Tool ( MSDeploy): Build Package zawierający dodatkowe pliki lub wyłączający określone pliki. Oto streszczenie. Po włączeniu plików pokazuję, jak również wykluczyć pliki.

W Tym Dodatkowe Pliki

Dołączenie dodatkowych plików do pakietu jest nieco trudniejsze, ale nadal nie ma większego znaczenia, jeśli czujesz się komfortowo z MSBuild, a jeśli nie więc przeczytaj to. Aby to zrobić, musimy podłączyć się do części procesu, która zbiera pliki do pakowania. Cel, który musimy rozszerzyć nazywa się CopyAllFilesToSingleFolder. Ten cel ma właściwość zależności PipelinePreDeployCopyAllFilesToOnefolderdependson, którą możemy wykorzystać i wstrzyknąć nasz własny cel. Utworzymy więc cel o nazwie CustomCollectFiles i wstrzykniemy go do procesu. Osiągamy to dzięki następującym (pamiętaj po imporcie oświadczenie).

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>

To doda nasz cel do procesu, teraz musimy zdefiniować sam cel. Załóżmy, że masz folder o nazwie Extra Files, który znajduje się 1 poziom powyżej twojego projektu internetowego. Chcesz dołączyć wszystkie te pliki. Oto cel CustomCollectFiles i omówimy go później.

<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />

    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

Tutaj to, co zrobiłem, to utworzenie elementu _CustomFiles i w Atrybutie Include powiedział mu, aby odebrał wszystkie pliki w tym folderze i każdy folder pod nim. Wtedy używam ten element do wypełnienia pliku dla elementu Packagingfromproject. Jest to element, którego MSDeploy używa do dodawania dodatkowych plików. Zauważ również, że zadeklarowałem wartość DestinationRelativePath metadanych. To określi względną ścieżkę, którą zostanie umieszczony w pakiecie. Użyłem tutaj polecenia Extra Files % (RecursiveDir)%(Filename)%(Extension). Chodzi o to, aby umieścić go w tej samej względnej lokalizacji w pakiecie, co znajduje się w folderze Extra Files.

Wyłączając pliki

Jeśli otworzysz plik projektu aplikacji internetowej stworzonej za pomocą VS 2010 w jego dolnej części znajdziesz linię z.

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

BTW możesz otworzyć plik projektu wewnątrz VS. kliknij prawym przyciskiem myszy na projekcie Wybierz Unload projektu. Następnie kliknij prawym przyciskiem myszy nieobciążony projekt i wybierz Edytuj projekt.

To oświadczenie będzie zawierać wszystkie cele i zadania, których potrzebujemy. Większość naszych dostosowań powinna być po tym imporcie,jeśli nie jesteś pewien, czy po! Więc jeśli masz pliki do wykluczenia, istnieje Nazwa elementu, ExcludeFromPackageFiles, która może być używana do tego celu. Na przykład załóżmy, że masz plik o nazwie Sample.Debugowanie.js, który jest zawarty w Twojej aplikacji internetowej, ale chcesz, aby ten plik był wykluczony z utworzonych pakietów. Poniższy fragment można umieścić po tej instrukcji importu.

<ItemGroup>
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">
    <FromTarget>Project</FromTarget>
  </ExcludeFromPackageFiles>
</ItemGroup>

Deklarując wypełnienie tej pozycji, pliki zostaną automatycznie wykluczone. Zwróć uwagę na użycie metadanych FromTarget. Nie będę się w to mieszać. tutaj, ale powinieneś wiedzieć, aby zawsze to określać.

 93
Author: Sayed Ibrahim Hashimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29

Znalazłem obejście problemu, używając elementu ExcludeFilesFromDeployment w pliku projektu. Mam pomysł z Web Deployment: wyłączanie plików i folderów

Więc jeśli chcesz spakować pliki projektu tak, jak istnieją w katalogu projektu po pomyślnym zbudowaniu i powiązanych krokach budowania post, wykonaj następujące czynności.

  1. Edytuj ustawienia projektu "Pakiet / Publikuj WWW" i
    select Items to deploy to be "All files in this project folder"
  2. Unload projekt
  3. kliknij prawym przyciskiem myszy na nieobciążonym projekcie i wybierz, aby edytować konfigurację projektu
  4. Zlokalizuj PropertyGroup element powiązany z ustawieniem konfiguracji, np. "Release"
  5. Wewnątrz elementu PropertyGroup dodaj następujące elementy i wyklucz pliki i foldery, których nie chcesz w pakiecie

    <ExcludeFilesFromDeployment>*.cs;**\.svn\**\*.*;Web.*.config;*.csproj*</ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>.svn;Controllers;BootstrapperTasks;Properties</ExcludeFoldersFromDeployment>
    
  6. Zapisz i przeładuj swój projekt

To rozwiązuje mój problem na razie, ale jeśli jest lepsze rozwiązanie, proszę pozwolić wiem, że nie jest to idealne rozwiązanie ze względu na hackery, ale może jest to nietypowy scenariusz wdrożenia?

 13
Author: brodie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-05 10:10:52

Wybierz pliki lub foldery i zmień akcję budowania jako zawartość w oknie Właściwości.

 8
Author: Gomes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-29 12:45:57

Wiem, że to stare pytanie, ale żadne z nich nie zadziałało na mnie .

W 2017 VS po prostu kliknąłem prawym przyciskiem myszy dodatkowy folder do opublikowania i wybrałem opublikuj to działało.

Przykład:

Tutaj wpisz opis obrazka

 3
Author: user2695433,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-31 17:35:31

Dodanie folderu bin (i jego zawartości) do projektu spowodowało skopiowanie plików do katalogu wyjściowego publish.

Moim problemem było to, że musiałem umieścić plik licencji oprogramowania własnościowego w folderze bin/, ale nie chciałem kopiować go ręcznie przy każdym wdrożeniu.

To było przy użyciu Visual Studio 2015 Professional

 0
Author: James Wierzba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-16 22:03:11

Wiem, że to stara rozmowa, ale natknąłem się na nią, próbując zrobić to samo i pomyślałem, że pomocne będzie dodanie tego, co znalazłem tutaj.

Prawie wszystkie artykuły o dodawaniu dodatkowych plików w Twojej publikacji używają tej metody dodawania CopyAllFilesToSingleFolderForPackageDependsOn lub CopyAllFilesToSingleFolderForMSDeployDependsOn pozycji w PropertyGroup i wszystkie są takie same jak "dodałem to na końcu pliku ..."

To właśnie zrobiłem i spędziłem popołudnie próbując dowiedzieć się, dlaczego nic się nie dzieje, dopóki nie zdałem sobie sprawy, że już PropertyGroup sekcja na górze pliku. Kiedy umieściłem mój CopyAllFilesToSingleFolderForPackageDependsOn w tej sekcji działało dobrze.

Mam nadzieję, że to kogoś kiedyś uratuje

 0
Author: john.gleeson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 08:51:10