프로젝트 콘 외부에있는 .csproj에 콘텐츠 파일 포함
"C : \ Projects \ MyProject \"에있는 MyProject.csproj라는 C # 프로젝트가 있습니다. 이 프로젝트의 출력 디렉토리에 복사하려는 파일도 있습니다. 그러나 파일은 "C : \ MyContentFiles \"위치에 있습니다. 즉, 프로젝트 콘 내에 있지 않습니다. 이 디렉토리에는 하위 디렉토리도 있습니다. 디렉토리의 내용은 관리되지 않습니다. 그러므로 나는 그 아래에있는 모든 것을 포함해야합니다.
프로젝트에 '콘텐츠'로 포함하면 복사되지만 디렉토리 구조가 손실됩니다. 나는 다음과 같이했다.
<Content Include="..\..\MyContentFiles\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
이러한 파일 / 디렉터리를 디렉터리 구조가 유지 된 프로젝트의 출력 디렉터리에 재귀 적으로 복사하려면 어떻게해야합니까?
파일을 링크로 추가해야합니다.
- VS에서 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다.
- 추가-> 기존 항목 ...
- 파일을 찾으십시오.
- 그것을 선택하고.
- 링크로 추가 (대화 상자의 추가 버튼에 드롭 다운).
- 파일의 속성을 열고 "출력 디렉터리로 복사"를 "항상 복사"로 설정합니다.
그러나 디렉토리 트리에 대해서는 할 수 없습니다.
대신이를 위해 빌드 후 작업을 작성해야합니다. 이것은 당신을 쳐다볼 샘플 입니다.
저는 @Dmytrii 가 한 손으로 바로 잡을 수 있다고 믿습니다 . "링크"기능을 사용하고 싶습니다.
그러나 그는 디렉토리 트리에 연결할 수 없다고 말할 때 부분적으로 만 정확합니다. 실제로 Visual Studio의 GUI를 사용하여 링크를 추가하려고 할 때 사실이지만 MSBuild는이를 지원합니다.
디렉토리 구조를 유지하려면 노드에 %(RecursiveDir)
태그를 추가하기 만하면됩니다 <link>
.
<Content Include="..\..\MyContentFiles\**\*.*">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
MSBuild Well-known Item Metadata 페이지 는 액세스 할 수있는 메타 데이터에 대해 자세히 설명합니다.
Mandark 의 대답은 콘텐츠 파일을 솔루션에 직접 추가하고 솔루션 탐색기에 표시됩니다. 원본 디렉토리에서 파일이 추가되거나 삭제 될 때마다 Visual Studio에서 자동으로 선택하지 않습니다. 또한 솔루션 탐색기에서 파일이 삭제되거나 추가 될 때마다 프로젝트 파일이 변경되고 폴더 만 포함하는 대신 모든 파일이 별도로 포함됩니다.
이를 방지하기 위해 동일한 트릭을 사용할 수 있지만 별도의 프로젝트 파일에 넣은 다음 가져옵니다.
프로젝트 파일 (예 : include.proj)은 다음과 같습니다.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Content Include="..\..\MyContentFiles\**">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
자신의 프로젝트 파일에 다음 줄을 추가하십시오.
<Import Project="include.proj" />
Visual Studio는이 파일을 엉망으로 만들지 않고 빌드 중에 파일을 콘텐츠로 추가합니다. 원래 디렉토리의 변경 사항은 항상 포함됩니다. 파일은 솔루션 탐색기에 표시되지 않지만 출력 디렉터리에 포함됩니다.
이 트릭에 대해 알아 보았습니다. http://blogs.msdn.com/b/shawnhar/archive/2007/06/06/wildcard-content-using-msbuild.aspx
프로젝트 파일 하단에 추가하는 다음은 빌드 후 이벤트의 디렉터리 구조를 유지하는 콘텐츠 파일을 빌드의 대상 디렉터리 $(TargetDirectory)
(일반적으로 $(MSBuildProjectDirectory)\bin\Debug
)에 복사합니다 .
<ItemGroup>
<ExtraContent Include="$(MSBuildProjectDirectory)\..\..\MyContentFiles\**" />
</ItemGroup>
<Target Name="AfterBuild">
<Copy
SourceFiles="@(ExtraContent)"
DestinationFiles="@(ExtraContent->'$(TargetDir)\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" />
</Target>
이러한 파일이 MyContentFiles라는 디렉토리로 이동해야하는 경우 복사 전에 다음을 추가 할 수 있습니다.
<MakeDir Directories="$(TargetDir)\MyContentFiles" Condition=" !Exists('$(TargetDir\MyContentFiles') " />
그리고 변경
<Copy
SourceFiles="@(ExtraContent)"
DestinationFiles="@(ExtraContent->'$(TargetDir)\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" />
에
<Copy
SourceFiles="@(ExtraContent)"
DestinationFiles="@(ExtraContent->'$(TargetDir)\MyContentFiles\%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" />
나는 생각한다
<Content Include="..\..\MyContentFiles\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
그 폴더와 하위 폴더의 모든 것을 원하기 때문에 충분합니다.
To include files in a folder for a .NET Core project,
<ItemGroup>
<None Update="..\..\MyContentFiles\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
And the items' property "Copy to Output Directory" will be "Copy if newer":
To ignore a file in a .Net Core project:
<ItemGroup>
<Content Include="appsettings.local.json">
<CopyToOutputDirectory Condition="Exists('appsettings.local.json')">PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
'Programing' 카테고리의 다른 글
Git 병합 중단 (0) | 2020.11.03 |
---|---|
HTML 구문 분석의 예를 제공 할 수 있습니까? (0) | 2020.11.03 |
이 배열에서 고유 한 요소를 얻으려면 어떻게해야합니까? (0) | 2020.11.03 |
C #을 사용하여 시간 범위 값을 "hh : mm Am / Pm"형식으로 변환 (0) | 2020.11.03 |
Swift-방향 변경 감지 방법 (0) | 2020.11.03 |