컴파일 타임에 응용 프로그램 폴더로 파일 복사


95

프로젝트 .\bin\debug\에서 컴파일 할 때 폴더 로 복사하고 싶은 파일이 있다면 프로젝트 의 루트에 넣어야하는 것 같습니다. 하위 폴더에 넣는 것은 .\bin\debug\저장된 동일한 구조 의 폴더 로 복사하는 것처럼 보입니다 .

이것을 피할 수있는 방법이 있습니까?

그냥 명확하게하기 위해 : 나는 경우 MyFirstConfigFile.txtMySecondConfigFile.txtA의 ConfigFiles폴더를 내가 그들의 설정 출력에 복사복사를 ... , 그들은이 나타납니다 .\bin\debug\ConfigFiles\폴더. .\bin\debug\폴더 에 표시되기를 원합니다 .

답변:


93

빌드 후 이벤트로이를 수행 할 수 있습니다. 컴파일시 파일을 작업 없음으로 설정 한 다음 매크로에서 파일을 원하는 디렉터리로 복사합니다.

다음은 Configuration이라는 디렉토리의 모든 파일을 루트 빌드 폴더에 복사하여 작동 할 것이라고 생각하는 빌드 후 매크로입니다.

copy $(ProjectDir)Configuration\* $(ProjectDir)$(OutDir)

1
대상의 경우 $ (ProjectDir) \ % (OutDir)이 아니어야합니까?
Ed Greaves

11
수정 및 테스트 (VS2010)이 매크로는 다음과 같습니다 복사 "firebird_bin $ (PROJECTDIR) 파이어 버드 \ *" "$ (PROJECTDIR) $ (OUTDIR)"
에릭 나무의 줄기-Feysot

또한 출력을 위해 상대 파일을 수행 할 수도 있습니다. copy "$ (ProjectDir) Firebird \ firebird_bin *" "$ (OutDir)"
Elendurwen

3
나는 따옴표의 사용이 필요하다고 생각한다 :copy "$(ProjectDir)subfolder_name\"* "$(ProjectDir)$(OutDir)"
tedebus

1
MSVS2017 년 (15.4) 그냥해야한다 $(OutDir)(없이 즉 $(ProjectDir)보인다) ... 다른 사람은 이중 경로 오류를 얻을
JHBonarius

51

csproj에서 MSBuild 작업을 사용할 수 있습니다.

csproj 파일 편집

  <Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)yourfiles" DestinationFolder="$(YourVariable)" ContinueOnError="true" />
  </Target>

와일드 카드를 사용하여 많은 파일을 복사 할 수 있고 프로젝트에있을 필요가 없기 때문에 이것이 최상의 솔루션입니다.
Chris Bordeman

37

솔루션 탐색기의 루트에 파일 또는 링크를 넣은 다음 파일 속성을 설정할 수도 있습니다.

Build action = Content

Copy to Output Directory = Copy if newer (예)

링크의 경우 Windows 탐색기에서 Shift 및 Ctrl 키를 누른 상태에서 솔루션 탐색기로 파일을 끌어옵니다.

여기에 이미지 설명 입력


3
이는 영업 이익에 허용되지 않는 원래의 상대 경로, 보존합니다
jlee

프로젝트의 최상위 노드에 파일을 넣으면 출력 폴더 $ (OutputPath)에 직접 복사됩니다.
Georg

4

개인적으로 저는 이런 방식을 선호합니다.

.csproj추가 할 수정

<ItemGroup>
    <ContentWithTargetPath Include="ConfigFiles\MyFirstConfigFile.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>%(Filename)%(Extension)</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>

1
제 생각에는 빌드 후 이벤트보다 낫습니다. 감사합니다!
khlr

이것은 프로젝트를 마우스 오른쪽 단추로 클릭하고 솔루션 탐색기에서 "추가 | 기존 항목"을 선택한 다음 파일 속성 "출력 디렉터리로 복사"를 "최신 인 경우 복사"로 설정하는 것과 동일하지 않습니까? XML을 직접 수정할 필요가 없습니다.
Antony Booth

@AntonyBooth 잠시 후에는 IDE에서 동일한 작업을 수행하는 방법을 배우는 것보다 진행 상황을 이해하고 코드를 직접 수정하는 것이 항상 더 쉽다는 것을 알게 될 것입니다. 오늘은 Visual Studio를 사용하고 있으며 내일은 JetBrains Rider가 될 수 있으며 모레 VS Code가 될 수 있습니다. 결국, 당신은 항상 IDE보다는 언어를 마스터하는 것이 더 낫습니다. 추신 : 나는 당신이 설명하는 것이 동일한 지 모르겠습니다. XML로하는 방법 만 알고 있기 때문입니다.
Jérôme MEVEL

3

하위 폴더에서 하위 폴더로 복사

 if not exist "$(ProjectDir)$(OutDir)subfolder" mkdir "$(ProjectDir)$(OutDir)subfolder"

 copy "$(ProjectDir)subfolder\"  "$(ProjectDir)$(OutDir)subfolder\"

7
StackOverflow에 오신 것을 환영합니다. 기여해 주셔서 감사합니다. 이미 많은 찬성 답변이있는 정말 오래된 질문에 답변하셨습니다. 기존의 찬성 답변 외에도 답변이 유용하다고 생각되면 답변이 문제를 해결하는 이유와 다른 답변과 더 나은 / 다른 이유에 대한 약간의 설명을 추가해야합니다.
Matthijs Wessels

1

프로젝트에서 빌드 후 이벤트를 사용하려고합니다. 거기에서 출력을 지정할 수 있으며 프로젝트 경로, 항목 이름 등과 같이 자주 사용되는 항목에 대한 매크로 값이 있습니다.


0

프로젝트의 PostBuild 이벤트를 사용할 수 있습니다. 빌드가 완료된 후 DOS 배치 파일을 실행하고 원하는 파일을 원하는 폴더에 복사 할 수 있습니다.


0

"컴파일 시간에 응용 프로그램 폴더에 파일 복사"를 검색하는이 질문을 발견했습니다. OP는 이미 정렬 된 것으로 보이지만 그렇지 않은 경우 :

Visual Studio에서 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 '출력으로 복사'옵션을 '항상'으로 변경합니다. http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx 참조


5
영업 이익은 복사 된 파일 위치의 상대적인 디렉토리 구조를 유지하지 않고 컴파일 디렉토리에 복사 요청
악셀 코스타스 페냐를
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.