VS2008이 있는데 특정 파일을 디렉터리에서 내 /bin/폴더 로 복사하고 싶습니다 . 파일 (에 있음 /common/browserhawk/)을 “출력 디렉토리에 복사”로 설정했습니다. 그러나 폴더 구조도 복사합니다. 파일이/bin/common/browserhawk/
이 파일을 어떻게 복사 할 수 /bin/있습니까? 올바르게 복사하기 위해 웹 사이트의 루트에 저장하고 싶지 않습니다.
답변
빌드 후 이벤트를 추가하여 파일을 복사 할 수 있습니다. 
프로젝트 속성, 빌드 이벤트 탭으로 이동하여 빌드 후 이벤트 명령 줄에 다음을 추가합니다.
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.txt이 bin\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에서 사용했습니다. 다음과 같은 이유로이 솔루션을 선호합니다.
- XML은 모든 프로젝트에서 재사용 가능
- “RootContent”는 다른 “Content”와 마찬가지로 Visual Studio UI에서 빌드 작업으로 선택됩니다.
- “CopyToOutputDirectory”는 예상대로 준수됩니다.
- RootContent는 프로젝트의 출력에 추가됩니다. Project-References를 통해 전달되고 “Clean”을 준수합니다.
- 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>
