<Compile Include="..\Path\To\ParentFolder\*.*"
Exclude="..\Path\To\ParentFolder\NotThisOne.cs;..\Path\To\ParentFolder\NotThisOneEither.cs">
<Link>ParentFolder\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>
<!-- Visual Studio loves to refactor these things so I always add it as a comment too so I can restore it.
Source Code repo check-ins are an easy way to spot this when it happens.
<Compile Include="..\Path\To\ParentFolder\*.*"
Exclude="..\Path\To\ParentFolder\NotThisOne.cs;..\Path\To\ParentFolder\NotThisOneEither.cs">
<Link>ParentFolder\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>
-->
<!-- This sort of abomination is also possible, if not advisable -->
<Compile Include="..\zSourceCode\**\*.*" Exclude="..\zSourceCode\Properties\AssemblyInfo.cs;..\zSourceCode\bin\**\*.*;..\zSourceCode\obj\**\*.*;..\zSourceCode\**\*.csproj;..\zSourceCode\**\*.user;..\zSourceCode\**\*.vstemplate;..\zSourceCode\readme.txt;..\zSourceCode\**\*.lsp;..\zSourceCode\**\*.scr;..\zSourceCode\**\*.ico;..\zSourceCode\**\*.txt">
<!-- This has an absolute path with a variable previously declared in this or another .csproj file -->
<Compile Include="$CadExtensionClassesRootFolder$\Common\*.*" >
<Link>Common\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>