内部方法代码重用

时间:2010-12-13 05:44:11

标签: c# code-reuse internal

假设您有两个完全独立的项目:项目1和项目2.一个是Windows应用程序,一个是Web应用程序。

如果两个项目都需要A,B和C类用于他们自己的内部使用,那么在两个项目之间的类中促进代码重用的最佳方法是什么(特别是代码更新时)随着时间的推移)?

  • 强制班级公开,打破整洁的公共界面,并从一个项目引用另一个项目(哎呀!)
  • 为共享组件创建第三个项目,然后仅在内部为主项目使用它们(哎呀!)
  • 将项目1中的类“添加”到项目2(超出项目文件夹)并接受项目2将不具有在项目文件夹中构建所需的所有类(可接受但不理想)
  • 依赖于复制粘贴,源代码控制交叉引用或其他一些非编程特技。
  • 目前正在躲避我的其他一些技巧(手指交叉......)

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

5 个答案:

答案 0 :(得分:5)

您可以将InternalsVisibleTo assembly attribute用于朋友程序集,以允许程序集访问另一个程序集中标记为internal的类型和成员。

答案 1 :(得分:4)

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

类库项目具有.dll扩展名的输出,可供任何其他.NET项目使用(以任何语言编写)。要使用dll,请添加对文件的引用,然后输入

using the_namespace_of_dll

这是绝对的解决方案

答案 2 :(得分:1)

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

我以[差不多]所有费用避免复制'粘贴'。 SCM方法可以起作用,但并不真正强制开发ABI,并且在不同的SCM中得不到很好的支持。没有帮助的SVN非常糟糕,除非一个解决方案是“所有者”;然后外部可以公平。

答案 3 :(得分:0)

对于访问此页面的人来说,做同样的事情,我发现这个更加深入的解释清楚:

http://dotnetstep.blogspot.com/2009/01/internalsvisibleto-attribute-usage.html

答案 4 :(得分: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>

...并且会将源文件夹和子文件夹中的所有C#文件作为目标项目中名为\Libs\的文件夹中的链接文件提供给您。

  • $(Codez)是我在PC上使用的Windows环境变量。
  • 我也可以在结尾使用*.*而不是*.cs
  • 这是Visual Studio可能会破坏您的一件事,将文件添加到充满通配符链接文件的文件夹中可能会将其分解为单独的条目。或不。取决于风。