Kopiowanie do katalogu wyjściowego kopiuje strukturę folderów, ale chce kopiować tylko pliki

Mam VS2008 I chcę skopiować pewne pliki z katalogu do mojego folderu /bin/. Ustawiłem pliki (znajdujące się w /common/browserhawk/) na "Kopiuj do katalogu wyjściowego". Jednak kopiuje również strukturę folderów: pliki są kopiowane do /bin/common/browserhawk/

Jak mam skopiować te pliki do /bin/? Nie chcę przechowywać ich w katalogu głównym witryny, aby je poprawnie skopiować.

Podobne pytanie: Visual Studio dodaje .dll i .pdb do projektu po kompilacji

Author: Community, 2009-06-18

8 answers

Możesz dodać zdarzenie post Build, aby skopiować pliki.
Przejdź do właściwości projektu, Zakładka Build Events i dodaj do wiersza poleceń zdarzenia po zbudowaniu:

copy "$(ProjectDir)\common\browserhawk\*.*" "$(TargetDir)"

Pamiętaj, aby dołączyć cudzysłowy, jeśli ścieżka projektu zawiera spacje.

 59
Author: Bill A.,
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-09-23 14:42:31

Ponieważ nie mogę skomentować poprzednich odpowiedzi, umieszczę rozwiązanie tutaj:

Dodając do tego, co dodał @PaulAlexander, Dodaj do swojego .csproj/plik vbproj:

<ItemGroup>
    <AvailableItemName Include="RootContent">
      <Visible>false</Visible>
    </AvailableItemName>  
</ItemGroup>
<Target Name="AfterBuild">
    <Copy
        DestinationFolder="$(OutputPath)"
        SourceFiles="@(RootContent)"
        SkipUnchangedFiles="true"
        />  
</Target>

To pozwala wybrać" RootContent " jako akcję budowania w oknie Właściwości, a wszystkie są dostępne za pośrednictwem interfejsu graficznego. Bardziej kompletne wyjaśnienie: opcja "AvailableItemName" zasadniczo tworzy nową listę nazw, do której można przypisać elementy w projekcie pod właściwością" Build Action " w okno Właściwości. Następnie możesz użyć tej nowo utworzonej listy w dowolnym celu (np. poprzez " @(RootContent)").

 44
Author: shockwave,
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
2010-12-01 19:20:43

Jeśli edytujesz .csproj / vbproj w edytorze tekstowym możesz kontrolować, gdzie plik jest umieszczony w katalogu wyjściowym, a także jaką nazwę będzie miał plik w katalogu wyjściowym. Na przykład:

<None Include="content\someContent.txt">
  <Link>someContentInOutputDirectory.txt</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

Spowoduje to umieszczenie pliku content\someContent.txt w bin\someContentInOutputDirectory.txt. Możesz również wybrać podkatalog w bin, Jeśli chcesz; po prostu dodaj go do elementu Link.

 43
Author: Daniel Yankowsky,
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-02-03 18:18:54

Uważam, że polecenie XCOPY lepiej radzi sobie z katalogami i plikami. Dlatego

    XCOPY "$(ProjectDir)common/browserhawk" "$(TargetDir)" /E /I /F /Y

Który pozwala na tworzenie folderów poza katalogiem docelowym.

    XCOPY "$(ProjectDir)Templates" "$(TargetDir)" /E /I /F /Y

Struktura folderów/plików projektu:

    A:\TEMP\CONSOLEAPPLICATION3\TEMPLATES
    ├───NewFolder1
    ├───NewFolder2
    │       TextFile1.txt
    │       TextFile2.txt
    └───NewFolder3
            TextFile1.txt
            TextFile2.txt
            TextFile3.txt

Staje się:

    A:\TEMP\CONSOLEAPPLICATION3\BIN\DEBUG
    │   ConsoleApplication3.exe
    │   ConsoleApplication3.pdb
    │   ConsoleApplication3.vshost.exe
    │   ConsoleApplication3.vshost.exe.manifest
    ├───NewFolder1
    ├───NewFolder2
    │       TextFile1.txt
    │       TextFile2.txt
    │
    └───NewFolder3
            TextFile1.txt
            TextFile2.txt
            TextFile3.txt
 15
Author: AMissico,
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
2010-07-30 20:48:20

Dodaj do swojego .csproj/plik vbproj

<Target Name="AfterBuild">
    <Copy
        DestinationFolder="$(OutputPath)"
        SourceFiles="@(RootContent)"
        SkipUnchangedFiles="true"
        />  
</Target>

Następnie zmień akcję budowania dowolnych plików w folderze głównym na RootContent.

 10
Author: Paul Alexander,
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
2010-07-29 15:54:21

Używałem tego w VS2010 i VS2015. Wolę takie rozwiązanie ponieważ:

  1. XML jest wielokrotnego użytku w dowolnym projekcie
  2. "RootContent" jest wybierany jako Akcja budowania w interfejsie Visual Studio, podobnie jak każda inna "zawartość".]}
  3. " CopyToOutputDirectory " jest przestrzegany, tak jak można się spodziewać
  4. RootContent jest dodawany do wyjścia projektu: jest przenoszony przez odniesienia do projektu, jest "czysty", itp.
  5. RootContent może być określony za pomocą symbolu wieloznacznego, zachowanie rekurencyjnej struktury folderów:
    <RootContent Include="common\browserhawk\**">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </RootContent>
    

W kierunku początku pliku projektu:

  <ItemGroup>
    <AvailableItemName Include="RootContent">
      <!-- Add "RootContent" as a choice in the "Build Action" dropdown. -->
      <Visible>False</Visible>
    </AvailableItemName>
  </ItemGroup>

Zapożyczone Z Tej Odpowiedzi

Po Microsofcie .import celów:

  <PropertyGroup>
    <AssignTargetPathsDependsOn>
      $(AssignTargetPathsDependsOn);
      IncludeRootContentAsContent;
    </AssignTargetPathsDependsOn>
  </PropertyGroup>
  <Target Name="IncludeRootContentAsContent">
    <CreateItem Include="@(RootContent)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(Extension)">
      <Output ItemName="ContentWithTargetPath" TaskParameter="Include" />
    </CreateItem>
  </Target>

Zapożyczone Z Tej Odpowiedzi

 5
Author: MattGerg,
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 12:10:05

W końcu dodałem krok do pliku nant do skopiowania po pomyślnym spełnieniu

<target name="action.copy.browserhawk.config" depends="compile.source">
    <copy todir="${App.Web.dir}/bin/" includeemptydirs="false">
        <fileset basedir="${browserhawk.config.dir}">
            <include name="bhawk_bb.dat" />
            <include name="bhawk_sp.dat" />
            <include name="browserhawk.properties" />
            <include name="maindefs.bdd" />
            <include name="maindefs.bdf" />
            <include name="BH_PRO.lic" />
        </fileset>
    </copy>
    <echo message="COPY BROWSERHAWK CONFIG: SUCCESS   ${datetime::now()}" />
</target>
 2
Author: Steve Wright,
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
2009-06-18 19:36:24

Możesz zbudować plik wsadowy, aby skopiować pliki i wykonać go jako zdarzenie post-build.

 1
Author: jvanderh,
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
2009-06-18 18:18:52