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>