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

发布于 2024-10-10 11:16:23 字数 718 浏览 5 评论 0原文

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

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

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我最亲爱的 2024-10-17 11:16:23

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

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

来源:

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:

帥小哥 2024-10-17 11:16:23
<Content Include="..\..\SomeDirectory\**\*.xml">
  <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\SomeDirectory\**\*.xml">
  <Link>SomeLinkDirectoryOfYourChoosing\%(Filename)%(Extension)</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
離人涙 2024-10-17 11:16:23

为了其他人的利益,这里是答案加上 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>

以及所有类型的文件(对于从第 3 方提取 CSS/JS/Style 文件夹很有用):

  <Content Include="..\PresentationLayer\CustomerStyle\**\*.*">
    <Link>CustomerStyle\placeHolder</Link>
  </Content>

For the sake of others, here's the answer plus the comment from Dean and Miserable Variable, which I found useful:

I have two projects, and I need to include *.xsd from one in the other, without copying the files or having to update the referencing csproj file every time a new XSD is added to the first.

The solution was to add the following to the csproj file

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

Note xxx.xsd, you have to give a dummy filename in the Link element. It just gets replaced.

Also, you can include all sub folders with:

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

And files of all type (useful for pulling in CSS/JS/Style folders from 3rd parties) with:

  <Content Include="..\PresentationLayer\CustomerStyle\**\*.*">
    <Link>CustomerStyle\placeHolder</Link>
  </Content>
淡莣 2024-10-17 11:16:23

要包含子文件夹:

<ItemGroup>
  <Compile Include="..\SomeExternalFolder\**\*.cs" LinkBase="YourProjectFolder" />
</ItemGroup>

To include subfolders:

<ItemGroup>
  <Compile Include="..\SomeExternalFolder\**\*.cs" LinkBase="YourProjectFolder" />
</ItemGroup>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文