MSBuild:如何将父目录中的一堆文件包含为链接?

时间:2016-02-18 05:10:08

标签: c# .net msbuild conditional-compilation

我正在编写一个C#项目,其中包含以下目录结构:

LibFoo
|
---- LibFoo.Shared
|    |
|    ---- [a bunch of .cs files]
|
---- LibFoo.Uwp
|    |
|    ---- LibFoo.Uwp.csproj
|
---- LibFoo.Wpf
     |
     ---- LibFoo.Wpf.csproj

我很想知道,是否可以在共享目录中包含C#文件,以便它们显示在Visual Studio的解决方案资源管理器中?我知道您可以通过为Link标记设置<Compile>属性来执行此操作,但是当我在.cs个文件中存在可变数量的<PropertyGroup> <!-- Compile everything in this dir --> <CompileRoot>..\LibFoo.Shared</CompileRoot> </PropertyGroup> <ItemGroup> <Compile Include="$(CompileRoot)\**\*.cs"> <Link> <!--What goes here?--> </Link> </Compile> </ItemGroup> 时,我不太确定如何执行此操作项目

澄清一下,这是我的csproj文件的相关部分:

<ItemGroup>
    <Compile Include="$(CompileRoot)\**\*.cs">
        <Link>$([MSBuild]::MakeRelative('$(CompileRoot)', '%(FullPath)'))</Link>
    </Compile>
</ItemGroup>

感谢您的帮助!

编辑:忘记提及,它们包含在父目录中的事实是相关的,因为这就是它们没有出现在Visual Studio中的原因。如果他们出现在VS中,我就不必做任何这种连接。

编辑2 :根据 shamp00的建议,我试过了这个:

Message

不幸的是,虽然从项目中运行git clone git@github.com:jamesqo/typed-xaml cd typed-xaml 任务时似乎输出正常,但链接似乎只是在Visual Studio中被忽略了。

编辑3 :对于有兴趣重新解决此问题的人,您可以从GitHub repository克隆来源:

<div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" id="add_manufacture_popup"></div>

之后,您可以在Visual Studio中打开解决方案并亲自查看效果。相关代码位于this文件中。

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

<Target Name="Default">
    <ItemGroup>
        <Parent Include="..\LibFoo.Shared\**\*.cs"/>
        <Compile Include="@(Parent)">
            <Link>..\LibFoo.Shared\%(Parent.Filename).cs</Link>
        </Compile>
    </ItemGroup>
    <Message Text="%(Compile.Identity) is linked to %(Compile.Link)"/>
</Target>

修改

根据this answer,以下作品......

<Compile Include="..\LibFoo.Shared\**\*.cs">
  <Link>.\thisDummyFolderNameDoesNotMatter</Link>
</Content>

修改2

我不确定如何使用外部 common.props 文件,但如果将以下内容直接添加到 Typed.Xaml.Wpf.csproj < / em>的

<ItemGroup>
  <Compile Include="..\Typed.Xaml\**\*.cs">
    <Link>notimportant</Link>
  </Compile>
</ItemGroup>