[visual-studio-2008] 출력 디렉토리에 복사는 폴더 구조를 복사하지만 파일 만 복사하려고합니다.

VS2008이 있는데 특정 파일을 디렉터리에서 내 /bin/폴더 로 복사하고 싶습니다 . 파일 (에 있음 /common/browserhawk/)을 “출력 디렉토리에 복사”로 설정했습니다. 그러나 폴더 구조도 복사합니다. 파일이/bin/common/browserhawk/

이 파일을 어떻게 복사 할 수 /bin/있습니까? 올바르게 복사하기 위해 웹 사이트의 루트에 저장하고 싶지 않습니다.

관련 질문 : Visual Studio는 컴파일 후 프로젝트에 .dll 및 .pdb를 추가합니다.



답변

빌드 후 이벤트를 추가하여 파일을 복사 할 수 있습니다.
프로젝트 속성, 빌드 이벤트 탭으로 이동하여 빌드 후 이벤트 명령 줄에 다음을 추가합니다.

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

프로젝트 경로에 공백이있는 경우 따옴표를 포함해야합니다.


답변

이전 답변에 대해 언급 할 수 없으므로 여기에 솔루션을 넣겠습니다.

@PaulAlexander가 제공 한 내용에 추가하여 .csproj / .vbproj 파일에 다음을 추가합니다.

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

이를 통해 속성 창에서 빌드 작업으로 “RootContent”를 선택할 수 있으며 모두 GUI를 통해 액세스 할 수 있습니다. 보다 완전한 설명 : “AvailableItemName”옵션은 기본적으로 속성 창의 “Build Action”속성 아래에 프로젝트의 항목을 할당 할 수있는 새 명명 된 목록을 만듭니다. 그런 다음이 새로 생성 된 목록을 원하는 대상에서 사용할 수 있습니다 (예 : “@ (RootContent)”를 통해).


답변

텍스트 편집기에서 .csproj / .vbproj를 편집하면 파일이 출력 디렉터리에 배치되는 위치와 출력 디렉터리에 파일 이름이 지정되는 것을 제어 할 수 있습니다. 예를 들면 :

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

그러면 파일 content\someContent.txtbin\someContentInOutputDirectory.txt. bin원하는 경우 하위 디렉토리를 선택할 수도 있습니다 . Link 요소에 추가하기 만하면됩니다.


답변

XCOPY 명령이 디렉토리와 파일을 더 잘 처리한다고 생각합니다. 따라서,

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

대상 디렉토리에서 폴더를 만들 수 있습니다.

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

프로젝트 폴더 / 파일 구조 :

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

된다 :

    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


답변

.csproj / .vbproj 파일에 다음을 추가합니다.

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

그런 다음 루트 폴더에서 원하는 파일의 빌드 작업을 RootContent로 변경합니다.


답변

나는 이것을 VS2010, VS2015, VS2017 및 VS2019에서 사용했습니다. 다음과 같은 이유로이 솔루션을 선호합니다.

  1. XML은 모든 프로젝트에서 재사용 가능
  2. “RootContent”는 다른 “Content”와 마찬가지로 Visual Studio UI에서 빌드 작업으로 선택됩니다.
  3. “CopyToOutputDirectory”는 예상대로 준수됩니다.
  4. RootContent는 프로젝트의 출력에 추가됩니다. Project-References를 통해 전달되고 “Clean”을 준수합니다.
  5. RootContent는 재귀 폴더 구조를 유지하면서 와일드 카드로 지정할 수 있습니다.
<RootContent Include="common\browserhawk\**">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</RootContent>

프로젝트 파일 시작쪽으로 :

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

이 답변에서 빌린

Microsoft .targets 가져 오기 후 :

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

이 답변에서 빌린


답변

성공적인 컴파일 후 복사 할 nant 빌드 파일에 단계를 추가했습니다.

<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>