代码之家  ›  专栏  ›  技术社区  ›  Jeff

Visual Studio链接文件目录结构

  •  2
  • Jeff  · 技术社区  · 15 年前

    我有两个版本的项目。一个用于Silverlight,一个用于.NET。SL项目中有绝大多数代码库。我想将SL项目中的所有文件作为链接文件全局添加到.NET版本中。我在.NET版本的csproj文件中成功地做到了这一点:

    <Compile Include="..\MyProj.Common.SL\**\*.cs" Exclude="..\MyProj.Common.SL\Properties\**">
    

    不幸的是,这会将所有文件直接添加到我的项目的根目录中…所以我最终得到了.NET项目中一个长的不可读的链接文件列表。我真的不想手工维护整个重复的目录结构,处理目录名更改、文件名更改等等。

    那么,在以上面的通配符方式添加链接文件时,是否有任何方法可以让Visual Studio保留目录结构?或者至少有一种方法可以让它将.NET项目中的所有链接文件组合在一起,比如myproj.common.sl.links?

    我来的最接近的就是 <Visible>false</Visible> <Compile> 标签,它有效地删除了300多个文件的长不可读列表……但不幸的是,这会搞砸resharper,它不再将这些文件视为有效文件,它会疯狂地执行所有引用.NET项目的项目。如果我能找到一个方法,使重新竖琴不搞砸了,那也是一个可以接受的解决方案…

    有什么建议吗?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Jeff    15 年前

    我想我找到了一种方法让这个工作:

    <Compile Include="..\MyProj.Common.SL\**\*.cs" Exclude="..\MyProj.Common.SL\Properties\**">
      <Link>MyProj.Common.SL.LinkedFiles\MyProj.Common.SL.LinkedFiles</Link>
    </Compile>
    

    它将创建一个myproj.common.sl.linked files文件夹,并将该文件夹下的所有链接文件分组。

        2
  •  0
  •   Brian    15 年前

    我想我会这样做:

    • 复制现有项目的 <Compile> 项目,可能有,例如 Include="foo.cs" Include="Folder\bar.cs"
    • 将它们粘贴到新项目中
    • 搜索和替换 <Compile Include="(.*?)" /> 具有 <Compile Include="..\Other\$1" ><Link>$1</Link></Compile>

    我不知道我是否完全正确地得到了正则表达式搜索和替换语法,但关键是,你已经有了一个好的项目,你应该能够剪切,粘贴,regex替换它来获取相同的文件集,只从不同的文件夹引用,并具有相同的目录结构。

    此时仍有两个.csproj需要维护,但这也很容易修复。现在获取这个新的编译项列表,并将其放入名为“common.csproj”的文件中,该文件只包含具有这些编译项的属性组,然后拥有这两个项目。 <Import Include="..\Common.csproj" /> 不包括任何 Compile 他们自己的物品。

    基本上,只需要一点手工操作就可以重构一次用于共享的.csproj文件,然后我想您就可以设置了。我不确定这是否是解除封锁的“最简单”方法,但我认为这听起来很像你想要的“理想”结构。