Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

msbuild

csproj

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?

like image 316
Miserable Variable Avatar asked Jan 07 '11 07:01

Miserable Variable


People also ask

What is ItemGroup in MSBuild?

In addition to the generic Item element, ItemGroup allows child elements that represent types of items, such as Reference , ProjectReference , Compile , and others as listed at Common MSBuild project items.

What is ItemGroup?

An item group is a collection of products which share similar attributes like color, production, features, or usage. Item groups can also be formed based on the markets in which they're sold or if they're similar in price.


2 Answers

<Content Include="..\..\SomeDirectory\**\*.xml">
  <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
like image 119
Dean Avatar answered Sep 23 '22 18:09

Dean


Others have suggested the using the Link attribute with placeholders, which indeed works. However, Microsoft has implemented a new attribute (which isn't in any of my code completion suggestions), named LinkBase, shown below.

<ItemGroup>
   <Compile Include="..\SomeDirectory\*.cs" LinkBase="SomeDirectoryOfYourChoosing" />
</ItemGroup>

Sources:

  • https://github.com/Microsoft/msbuild/issues/2795
  • https://github.com/dotnet/sdk/pull/1246
  • Link Additional Files in Visual Studio
like image 30
Michael Bisbjerg Avatar answered Sep 22 '22 18:09

Michael Bisbjerg