2010-06-13 126 views
2

我有两个版本的项目。一个用于Silverlight,一个用于.NET。 SL项目拥有绝大多数的代码库。我想将SL项目中的所有文件作为链接文件全局添加到.NET版本中。我已经成功地在.NET版本中的csproj文件,以便成功地这样做:Visual Studio链接文件目录结构

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

不幸的是,这增加的所有文件中我的项目的根......所以我结束了一个.NET项目中长期不可读的链接文件列表。我真的不希望手工维护整个重复的目录结构,并处理目录名称更改和文件名称更改等等。

那么,有没有什么办法让Visual Studio在通配符方式上面添加链接文件时保留目录结构?或者至少有一种方法可以将所有链接文件组合在一起,像MyProj.Common.SL.Links这样的.NET项目的目录下。

我最接近的是设置<Visible>false</Visible>标签下的<Compile>标签,它有效地删除了300多个文件的长长的不可读列表....但不幸的是,这使得Resharper不再能够看到这些文件为在所有参考.NET项目的项目中,它都是疯狂的。如果我能想出一种使Resharper不会搞砸的方法,那也是一个可以接受的解决方案......

有什么建议吗?

谢谢。

+1

我希望看到像这样实现的VS插件。将其称为“链接所有项目文件”或其他内容,您可以在项目A中并告诉它链接项目B中的所有项目文件,然后将项目B中的所有文件添加到项目A中,作为与目录结构完全一致的链接。然后它可以作为预构建步骤运行。任何有VS扩展经验的人都可以参加? – PhilChuang 2011-02-25 22:15:27

回答

4

我想我找到得到这个工作的一种方式:

<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.LinkedFiles和组的所有链接的文件。

0

我想我会做到这一点:

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

我不知道,如果我得到了正则表达式搜索和替换语法完全正确的,但问题是,你已经有了一个很好的项目,你应该能够剪切,粘贴,正则表达式 - 替换它以获得相同的一组文件,只从不同的文件夹中引用,并且具有相同的目录结构。

你现在仍然有两个.csproj来维护,但这也很容易修复。现在将这个新的编译项目列表放入一个名为例如“Common.csproj”只包含带有这些编译项目的属性组,然后同时包含两个项目<Import Include="..\Common.csproj" />并且不包含任何Compile项目。

基本上,一些手动工作来重构.csproj文件共享一次,然后我认为你会被设置。我不确定这是否是解除阻碍的最简单方法,但我想这听起来像是您想要的“理想”结构。