0

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

如果两个项目都需要类 A、B 和 C 供其内部使用,那么在两个项目之间的类中促进代码重用的最佳方法是什么(尤其是随着代码的不断更新)?

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

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

4

5 回答 5

5

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

于 2010-12-13T05:48:44.970 回答
4

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

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

using the_namespace_of_dll

这是绝对的解决方案

于 2010-12-13T05:48:00.743 回答
1

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

我几乎不惜一切代价避免复制粘贴。SCM 方法可以工作,但并不真正强制开发 ABI,并且在不同的 SCM 中没有得到很好的支持。除非一种解决方案是“所有者”,否则没有帮助的 SVN 非常糟糕;然后外部因素可以公平马马虎虎。

于 2010-12-13T05:55:37.407 回答
0

对于任何访问此页面并希望做同样事情的人,我发现这个更深入的解释非常清晰:

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

于 2010-12-13T06:59:28.393 回答
0

将代码添加到一个项目,然后将其作为链接添加到另一个项目。然后你不必担心“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 可能会破坏您的事情之一,将文件添加到充满通配符链接文件的文件夹中可能会将它们分解为单独的条目。或不。取决于风。
于 2015-10-28T03:30:32.130 回答