Могу ли я использовать подстановочный знак и элемент Link внутри элемента Compile? - PullRequest
6 голосов
/ 07 января 2011

В файле .csrpoj, если у меня есть

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

Затем Visual Studio показывает этот файл в виде ярлыка в папке Dir1 в обозревателе решений.

Если у меня есть

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

Тогда все файлы .cs отображаются как ярлыки в обозревателе решений на верхнем уровне:

Есть ли способ включить все файлы в какую-то папку и сделать так, чтобы они отображались в подпапке? Пропуск имени файла в элементе Link не работает:

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

Файлы по-прежнему отображаются на верхнем уровне.

Как включить все файлы в папку и по-прежнему использовать элемент Link? Мне нужно это потому, что мне нужно включить файлы из нескольких папок, и некоторые из них имеют одинаковые имена. Два файла на верхнем уровне не могут иметь одинаковые имена.

Есть ли другой способ добиться этого?


Я новичок в платформе Visual Studio. Заранее извиняюсь за глупость в вопросах.

Ответы [ 3 ]

9 голосов
/ 16 марта 2011
<Content Include="..\..\SomeDirectory\**\*.xml">
  <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
5 голосов
/ 20 июня 2013

Ради других, вот ответ плюс комментарий от Дина и Miserable Variable, который я нашел полезным:

У меня есть два проекта, и мне нужно включить * .xsd из одного в другой, без копирования файлов или необходимости обновлять ссылочный файл csproj каждый раз, когда новый XSD добавляется в первый.

Решением было добавить следующее в файл csproj

  <Content Include="..\BusinessLayer\Schemas\*.xsd">
    <Link>Contract\Schemas\xxx.xsd</Link>
  </Content>

Обратите внимание, xxx.xsd, вы должны указать фиктивное имя файла в элементе Link. Он просто заменяется.

Кроме того, вы можете включить все подпапки с помощью:

  <Content Include="..\BusinessLayer\Schemas\**\*.xsd">
    <Link>Contract\Schemas\ThisTextDoesntMatter</Link>
  </Content>

И файлы всех типов (полезно для извлечения из CSS сторонних папок CSS / JS / Style) с:

  <Content Include="..\PresentationLayer\CustomerStyle\**\*.*">
    <Link>CustomerStyle\placeHolder</Link>
  </Content>
1 голос
/ 22 мая 2018

Другие предложили использовать атрибут Link с заполнителями, который действительно работает.Однако Microsoft реализовала новый атрибут (которого нет ни в одном из моих предложений по дополнению кода) с именем LinkBase, показанным ниже.

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

Источники:

...