我有两个版本的项目。一个用于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搞砸的方法,那也是一个可以接受的解决方案......
有什么建议吗?
感谢。
答案 0 :(得分: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文件夹,并将该文件夹下的所有链接文件分组。
答案 1 :(得分:0)
我想我会这样做:
<Compile>
项目,这些项目可能是Include="foo.cs"
和Include="Folder\bar.cs"
<Compile Include="(.*?)" />
<Compile Include="..\Other\$1" ><Link>$1</Link></Compile>
我不知道我是否正确完成了正则表达式搜索和替换语法,但关键是,你已经有了一个好的项目,你应该能够剪切,粘贴,正则表达式替换它以获得相同的一组文件,仅从不同的文件夹引用,并具有相同的目录结构。
此时你还需要保留两个.csproj,但这也很容易修复。现在获取这个新的编译项列表,并将其放在一个名为eg的文件中。 “Common.csproj”只包含具有这些编译项的属性组,然后同时包含两个项目<Import Include="..\Common.csproj" />
,并且不包含他们自己的任何Compile
项。
基本上,一点点手工劳动来重构.csproj文件以进行一次共享,然后我认为你将被设置。我不确定这是否是解除阻挡的“最简单”方式,但我认为这听起来大概就像你想要的“理想”结构一样。