3

我有一个项目的两个版本。一种用于 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 项目的项目。如果我能想出一种方法让 Resharper 不会一团糟,那也是一个可以接受的解决方案......

有什么建议么?

谢谢。

4

2 回答 2

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 文件夹并将所有链接文件分组到该文件夹​​下。

于 2010-06-13T22:25:55.630 回答
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 文件以共享一次的一些手工劳动,然后我想你会被设置。我不确定这是否是解除封锁的“最简单”的方式,但我认为这听起来很像您可能想要的“理想”结构。

于 2010-06-13T21:44:02.273 回答