Search code examples
msbuildcsproj

Can I use both wildcard and Link element inside the Compile element?


In the .csrpoj file, If I have

<Compile Include="c:\path\File1.cs">
  <Link>Dir1\File1.cs</Link>
</Compile>

Then Visual Studio shows that file as a shortcut under Dir1 folder in the Solution Explorer.

If I have

<Compile Include="c:\path\*.cs"></Compile>

Then all .cs files show up as shortcuts in Solution Explorer at top level:

Is there a way to include all files in some folder and make then show up under a sub-folder? Omitting the filename in Link element does not work:

<Compile Include="c:\path\*.cs">
  <Link>Dir1\</Link>
</Compile>

The files still show up at top level.

How do I include all files in a folder and still use the Link element? The reason I need this is, I need to include files from multiple folders and some of them have the same name. Two files at top level cannot have the same name.

Any other way to achieve this?


Solution

  • <Content Include="..\..\SomeDirectory\**\*.xml">
      <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>