2009-09-01 54 views
3

我使用使用通配符將文件包含到Visual Studio中的文件夾中

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

將一堆xml文件包含到我的C#項目中。工作良好。

但是,我不希望它們出現在我項目的「根級」中,我寧願在項目的子文件夾中看到它們。

例如,此文件包含在Visual Studio的Mapping文件夾中:

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

這就是我想要的*.hbm.xml文件。

我無法弄清楚如何做到這一點仍然保持我的通配符*.hbm.xml部分,並將實際文件保存在不同的目錄中。

我看過MSDN上有關MSBUILD和項目的文檔,但沒有運氣。

回答

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

我決定只寫一個腳本,更新我的csproj文件。我將它作爲一個Exec任務添加到了我的msbuild腳本中。工作正常,但有點噁心。 – 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顯示資源在編譯程序集中,除了出現在Solution Explorer 。

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

(這是使用Visual Studio 2013)

+0

我可以證實,這適用於Visual Studio 2015 Update 3。 –

相關問題