2010-12-13 58 views
0

假设您有两个完全独立的项目:Project 1和Project 2.一个是Windows应用程序,另一个是Web应用程序。内部方法代码重用

如果这两个项目需要类A,B和C为自己内部使用,什么是在这两个项目之间的类促进代码重用的最佳方式(尤其是作为代码随时间更新)?

  • 部队类是公共的,打破整齐公共接口,并从一个项目一个参考其他(呸!)
  • 创建的共享组件的第三个项目,然后仅在内部使用它们对于主要项目(yuck!)
  • 将项目1中的类“添加”到项目2(超出项目文件夹)并接受项目2将不具有需要在其项目文件夹中构建的所有类(可接受,但并不理想)
  • 取决于复制粘贴,源代码控制交叉引用或其他非编程特技。
  • 多数民众赞成躲避我此刻的其他技术(手指交叉...)

注意,这些是相同的,内部的,辅助类所必需的两个项目。

回答

5

您可以使用InternalsVisibleTo assembly attribute的朋友组件,使组件访问类型和成员在另一个组件中标记为internal

+0

哇。我从来没有听说过这个,但它看起来只是我需要的东西。你每天都会学到一些东西! – Flipster 2010-12-13 06:05:56

+0

太棒了。这很好,而且比我预期的更容易。 +1并被接受。谢谢,约翰! – Flipster 2010-12-13 06:17:32

4

通常,它是通过使用类库项目实现的,您需要第三个项目(它是类库类型)。

类库项目具有.dll扩展名的输出,可供任何其他.NET项目(使用任何语言编写)使用。使用DLL,添加引用该文件,并把

using the_namespace_of_dll

这是绝对解决

1

我通常使用一个单独的解决方案(完成测试)并添加一个引用。然后我在末尾使用ILMerge来不公开一个单独的DLL(到目前为止,这对我来说工作得很好)。 John Rasch指出的方法可以联合使用,以防止“暴露”它,尽管我通常在信任用户/其他开发人员方面犯了错误。

我避免复制'粘贴在几乎所有的费用。供应链管理方法可以发挥作用,但并不真正迫使开发ABI,并且在不同的供应链管理中得不到很好的支持。没有帮助的SVN是非常糟糕的,除非一种解决方案是“业主”;那么外部就可以马马虎虎了。

0

的代码添加到一个项目,add it to the other as a link。那么你不必担心“InternalsVisibleTo” - 它就在那里。这两个项目的代码是相同的文件(或者你喜欢的许多项目)。

不要害怕编辑XML .cs​​proj文件。举例来说,这个工程......

<Compile Include="$(Codez)\z.Libraries\diff-match-patch\DiffMatchPatch\**\*.cs" 
Exclude="NotThisOne.cs;**\NotThisFolderWith\This*.cs"> 
<Link>Libs\%(RecursiveDir)%(Filename)%(Extension)</Link> 
</Compile> 

...会给你一个名为\Libs\文件夹下你的目标项目都从源文件夹中的C#文件,和子文件夹,如链接文件。

  • $(Codez)是我在PC上使用的Windows环境变量。
  • 我也可以在最后使用*.*而不是*.cs
  • 这是Visual Studio可能会破坏的那些东西之一,将文件添加到装满通配符链接文件的文件夹中可能会将它们分解为单独的条目。或不。取决于风。