假设您有两个完全独立的项目:项目1和项目2.一个是Windows应用程序,一个是Web应用程序。
如果两个项目都需要A,B和C类用于他们自己的内部使用,那么在两个项目之间的类中促进代码重用的最佳方法是什么(特别是代码更新时)随着时间的推移)?
请注意,这些是两个项目所必需的相同的INTERNAL辅助类。
答案 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 .csproj文件。例如,这有效......
<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
。