我有一个项目的两个版本。一种用于 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 不会变得一团糟,那也是一个可以接受的解决方案......

有什么建议么?

谢谢。

有帮助吗?

解决方案

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

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

其他提示

我想我会这样做:

  • 复制现有项目的 <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 文件以进行一次共享,然后我想您就可以了。我不确定这是否是解锁您的“最简单”方法,但我认为这听起来大约像您可能想要的“理想”结构。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top