애플리케이션 빌드 중 출력 할 자동 복사 파일
C # 프로젝트의 파일에 대한 출력 디렉터리 로 복사 속성이 있습니다. 그러나 VC ++ 프로젝트에서는 부재합니다. VC ++에서 Build 이벤트 를 사용 하고 다음과 같이 작성할 수 있다는 것을 알고 있습니다.
xcopy /y /d %(FullPath) $(OutDir)
CMD (및 기타 스크립팅 방법)의 사용을 피할 수있는 방법이 있습니까? msbuild가이 경우에 도움을 줄 수 있습니까?
사용중인 Visual Studio 버전에 따라 다릅니다. Visual Studio 2008의 VC ++ 프로젝트 파일 형식은 MSBuild가 아니므로 PostBuildStep에서 xcopy를 사용하는 것이 좋습니다.
Visual Studio 2010의 VC ++ 프로젝트에는 MSBuild 형식이 있습니다. 따라서 MSBuild 복사 작업의 기능이 있습니다.
다음은 샘플입니다.
<Copy
SourceFiles="%(FullPath)"
DestinationFolder="$(OutDir)"
/>
대상 디렉터리가 없으면 자동으로 생성됩니다.
MSDN Copy 작업 참조는 여기에 있습니다.
이 경우 MSBuild가 도움을 줄 수 있습니까?
MSVC 2012를 사용하면 다음과 같이 작동했습니다.
C ++ 프로젝트에 "Data / ThisIsData.txt"파일이 있다고 가정합니다.
프로젝트를 언로드합니다 (오른쪽 클릭-> 프로젝트 언로드).
프로젝트 XML 편집 (오른쪽 클릭-> .vcxproj 편집)
이제 편집기에서 프로젝트 MSBuild 파일이 XML로 표시됩니다.
"ThisIsData.txt"를 찾습니다. 다음과 같이 보일 것입니다.
<ItemGroup>
<None Include="Data\ThisIsData.txt" />
...
</ItemGroup>
이제 다음과 같은 다른 항목 그룹을 추가합니다.
<ItemGroup>
<Content Include="Data\ThisIsData.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
...
</ItemGroup>
프로젝트를 다시로드하고 빌드하십시오.
"ThisIsData.txt"파일은 $ (OutDir) \ Data \ ThisIsData.txt에 복사되어야합니다.
ItemGroup을 복제하는 이유는 무엇입니까?
단순히 None include를 콘텐츠 포함으로 변경하면 IDE가 더 이상 좋아하지 않고 표시하지 않습니다. 따라서 데이터 파일에 대한 빠른 편집 옵션을 유지하기 위해 중복 된 항목을 유지하기로 결정했습니다.
VS 2015에서는 C 프로젝트에 C #에있는 기능을 제공 할 수 있습니다. (jochen의 답변을 기반으로 한 아이디어.) 다른 ItemGroup을 추가하는 대신 CopyTo 요소를 추가하여 주어진 항목 그룹을 수정하십시오. IE는 그의 예를 사용하여 원래 항목을 다음과 같이 향상시킵니다.
<ItemGroup>
<None Include="Data\ThisIsData.txt" />
<DeploymentContent>true</DeploymentContent>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
...
</ItemGroup>
다른 ItemGroup이 필요하지 않습니다. CopyTo 요소를 추가하여 "Included In Project"속성을 추가합니다.
다음 앙리 SOCHA의 대답 VS2015 (그리고 아마도 VS2013와 VS2012, 또는 아무것도의 MSBuild 스타일의 프로젝트를 사용하여)에 대한의 ItemGroup 항목 유형은 중요하다.
특히 <Text>
항목은 복사되지 않는 반면 <Content>
항목은 복사 됩니다.
So, for a project directory Data containing a text file ThisIsData.txt, this will create a subdirectory Data under the $(OutDir)
directory and copy the file ThisIsData.txt from the project into it if it's newer:
<ItemGroup>
<Content Include="Data\ThisIsData.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
This won't, although it is what the Visual Studio IDE will insert if you add the text file to your project, and set the Content
property to True
.
<ItemGroup>
<Text Include="Data\ThisIsData.txt">
<DeploymentContent>true</DeploymentContent>
</Text>
</ItemGroup>
So in other words you need to add the file via the IDE to make it realise the file is included in the project (which adds <Text>
tag ItemGroup), and then open the project in a text editor and add the <Content>
tag ItemGroup to get it to do what you want.
I'm not sure what the <DeploymentContent>
tag actually does. It may be a remnant since the only MSDN reference I could find considers it archived: https://msdn.microsoft.com/en-us/library/aa712517.aspx
You can specify copying in the project file as Jeff G answered in another question:
In the
*.vcxproj
file, change:<Text Include="Filename.txt" />
to:
<Content Include="Filename.txt"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content>
Then in the
*.vcxproj.filters
file, change:<Text Include="Filename.txt"> <Filter>Resource Files</Filter> </Text>
to:
<Content Include="Filename.txt"> <Filter>Resource Files</Filter> </Content>
where the <Text ...>
tag is for specified text files (it'll be <Image ...>
for image files etc.)
In Visual Studio 2017 you can do this in the IDE. I am not sure about earlier versions.
Simply add the file as an included project file so it shows in the Solution Explorer. Then right click on the file and select the Properties menu.
Change the Content to "Yes" and change the Item Type to "Copy file"
If you look at the changes it made to the project file you can see it added this:
<ItemGroup>
<CopyFileToFolders Include="Filename.txt">
<DeploymentContent>true</DeploymentContent>
<FileType>Document</FileType>
</CopyFileToFolders>
</ItemGroup>
In visual studio 2019 after setting the file as "Include in project" you can edit the properties an select as Item Type "Copy file" (as shown in https://i.stack.imgur.com/vac2b.png) This avoids the manual vcxproj file edition.
If it's a COM dll, you can add it to the root of your project, mark it as 'Content' and set copy to output directory to 'Always'. I had to do this for signature capture COM assembly.
ReferenceURL : https://stackoverflow.com/questions/5779703/automatic-copy-files-to-output-during-application-building
'program tip' 카테고리의 다른 글
SQL 전체 텍스트 인덱스 채우기가 언제 완료되었는지 어떻게 알 수 있습니까? (0) | 2020.12.29 |
---|---|
크롬은 드래그하는 동안 커서를 텍스트로 설정합니다. (0) | 2020.12.29 |
iPhone : 스레드가 주 스레드인지 확인하는 방법은 무엇입니까? (0) | 2020.12.29 |
C # XML 주석에 '<'문자를 표시하는 방법은 무엇입니까? (0) | 2020.12.29 |
디렉토리가 아닌 Linux의 디렉토리에있는 파일 만 제거 (0) | 2020.12.29 |