2009-09-01 2 views
3

Visual Studio에서 폴더에 와일드 카드를 사용하여 파일 포함

<ItemGroup> 
    <EmbeddedResource Include="..\..\resources\hbm\*.hbm.xml" /> 
</ItemGroup> 

을 사용하여 여러 C# 프로젝트에 xml 파일을 포함시킵니다. 잘 작동합니다.

하지만 프로젝트의 "루트 수준"에 넣고 싶지는 않지만 프로젝트의 하위 폴더에서 볼 수 있습니다.

예를 들어,이 파일은 Visual Studio의 Mapping 폴더에 포함되어 있습니다.

<ItemGroup> 
    <EmbeddedResource Include="Mapping\User.hbm.xml" /> 
</ItemGroup> 

그게 내 *.hbm.xml 파일을 원합니다.

어떻게 해야할지 알 수없고 여전히 와일드 카드 *.hbm.xml 부분을 유지하고 실제 파일을 다른 디렉토리에 보관하십시오.

MSBUILD 및 항목에 대한 MSDN의 문서를 살펴 보았지만 운이 없습니다.

답변

5

당신은 링크와 와일드 카드를 동시에 사용할 수 없습니다.

당신은 Visual Studio에서 매핑 폴더에 User.hbm.xml 파일을 포함하는 연결이 표기법을 사용할 수

<ItemGroup> 
    <EmbeddedResource Include="..\..\resources\hbm\User.hbm.xml"> 
    <Link>Mapping\User.hbm.xml</Link> 
    </EmbeddedResource> 
</ItemGroup> 

을하지만 당신은

<ItemGroup> 
    <EmbeddedResource Include="..\..\resources\hbm\**\*.hbm.xml"> 
    <Link>%(RecursiveDir)\%(Filename)%(Extension)</Link> 
    </EmbeddedResource> 
</ItemGroup> 
+0

(이것은 비주얼 스튜디오 2013를 사용했다). 내 msbuild 스크립트에서 Exec 작업으로 추가했습니다. 잘 작동하지만 약간 칙칙합니다. – quip

+0

스크립트를 공유하는 데주의해야합니까? :-) – Etan

12

는 아마도이 가지고 할 수 없어 원래 답변이 게시 된 이후 MSBuild에서 변경되었지만 동시에 와일드 카드와 링크를 모두 사용할 수 있습니다. 예를 들어 C# 프로젝트에서 다음 블록을 사용하여 데이터 파일을 테스트 라이브러리로 가져옵니다.

<ItemGroup> 
    <None Include="..\SOMENAME.Tests\data\**\*.*"> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
     <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link> 
    </None> 
    </ItemGroup> 

내가 지금까지 본 적이 유일한 단점

은 MSBuild를 조금 짜증나는하지만 큰 문제가 파일 시스템 (즉, $(ProjectPath)\data\somesubfolder)의 폴더 이름을 재현한다는 것입니다.

테스트로서 다음과 같은 스 니펫을 사용하여 리소스를 포함하는 OP 요청을 시도했습니다. 다시 해보았습니다. dotPeek은 솔루션 탐색기에있는 것 외에도 컴파일 된 어셈블리에 리소스가 있음을 보여주었습니다. .

<ItemGroup> 
    <EmbeddedResource Include="..\SOMENAME.Tests\data\**\*.*"> 
     <Link>resources\%(RecursiveDir)%(Filename)%(Extension)</Link> 
    </EmbeddedResource> 
    </ItemGroup> 

난 그냥 내 CSPROJ 파일을 업데이트하는 스크립트를 작성하기로 결정

+0

Visual Studio 2015 Update 3에서 작동한다는 것을 확인할 수 있습니다. –

관련 문제