16

.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 元素?我需要这个的原因是,我需要包含来自多个文件夹的文件,其中一些具有相同的名称。顶级的两个文件不能具有相同的名称。

还有其他方法可以实现这一目标吗?

4

4 回答 4

19
<Content Include="..\..\SomeDirectory\**\*.xml">
  <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
于 2011-03-16T02:12:28.110 回答
19

其他人建议将Link属性与占位符一起使用,这确实有效。但是,Microsoft 实现了一个名为 的新属性(不在我的任何代码完成建议中),LinkBase如下所示。

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

资料来源:

于 2018-05-22T11:52:58.487 回答
6

为了他人着想,这里是答案以及来自 Dean 和 Miserable Variable 的评论,我觉得这很有用:

我有两个项目,我需要在另一个项目中包含 *.xsd,而无需复制文件或每次将新的 XSD 添加到第一个时都必须更新引用的 csproj 文件。

解决方案是将以下内容添加到 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/JS/Style 文件夹):

  <Content Include="..\PresentationLayer\CustomerStyle\**\*.*">
    <Link>CustomerStyle\placeHolder</Link>
  </Content>
于 2013-06-20T09:51:03.587 回答
2

要包括子文件夹:

<ItemGroup>
  <Compile Include="..\SomeExternalFolder\**\*.cs" LinkBase="YourProjectFolder" />
</ItemGroup>
于 2019-07-14T15:33:15.183 回答