我可以在Compile元素中同时使用通配符和Link元素吗?

Mis*_*ble 8 csproj visual-studio-2008

.csrpoj文件中,如果我有

<Compile Include="c:\path\File1.cs">
  <Link>Dir1\File1.cs</Link>
</Compile>
Run Code Online (Sandbox Code Playgroud)

然后Visual Studio将该文件显示为Dir1解决方案资源管理器中文件夹下的快捷方式.

如果我有

<Compile Include="c:\path\*.cs"></Compile>
Run Code Online (Sandbox Code Playgroud)

然后,所有.cs文件在顶级解决方案资源管理器中显示为快捷方式:

有没有办法将所有文件包含在某个文件夹中然后显示在子文件夹下?省略Link元素中的文件名不起作用:

<Compile Include="c:\path\*.cs">
  <Link>Dir1\</Link>
</Compile>
Run Code Online (Sandbox Code Playgroud)

文件仍显示在顶层.

如何将所有文件包含在文件夹中并仍然使用Link元素?我需要这个的原因是,我需要包含来自多个文件夹的文件,其中一些文件具有相同的名称.顶级的两个文件不能具有相同的名称.

有没有其他方法来实现这一目标


我是Visual Studio平台的新手.提前为问题中的任何愚蠢道歉.

Mic*_*erg 17

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

<ItemGroup>
   <Compile Include="..\SomeDirectory\*.cs" LinkBase="SomeDirectoryOfYourChoosing" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

资料来源:

  • 这是最好,最精简的答案:) (2认同)

小智 11

<Content Include="..\..\SomeDirectory\**\*.xml">
  <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Run Code Online (Sandbox Code Playgroud)


Rob*_*J1M 5

为了别人的缘故,这里的答案加上Dean和Miserable Variable的评论,我发现它很有用:

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

解决方案是将以下内容添加到csproj文件中

  <Content Include="..\BusinessLayer\Schemas\*.xsd">
    <Link>Contract\Schemas\xxx.xsd</Link>
  </Content>
Run Code Online (Sandbox Code Playgroud)

注意xxx.xsd,你必须在Link元素中给出一个虚拟文件名.它只是被取代了.

此外,您可以包含所有子文件夹:

  <Content Include="..\BusinessLayer\Schemas\**\*.xsd">
    <Link>Contract\Schemas\ThisTextDoesntMatter</Link>
  </Content>
Run Code Online (Sandbox Code Playgroud)

和所有类型的文件(用于从第三方拉入CSS/JS/Style文件夹):

  <Content Include="..\PresentationLayer\CustomerStyle\**\*.*">
    <Link>CustomerStyle\placeHolder</Link>
  </Content>
Run Code Online (Sandbox Code Playgroud)