我可以将每个类的一个大dll分成1个dll吗?

时间:2009-04-29 07:24:37

标签: c# visual-studio dll

Can I build 2 or more dlls from C# project in Visual Studio 2008?,我有另一个想法,只创建一个大项目。之后,我通过使用post-build事件来调用Win app项目(对于单独的一个大dll),将每个类的项目dll(包含许多类。)分成1个dll。怎么做?

此外,我还需要在一个大dll中管理附件。

更新 我找到了一些技巧可以指导我通过自定义构建来解决这个问题?而且,我想我可以创建自定义处理程序,通过使用单独的模块文件生成动态程序集文件。 Al.exe工具。但是这个功能超出了我的期望和不确定性(源代码很少改变)。

Multi-file Assemblies: What and How

How to: Build a Multifile Assembly

POCO Custom Multifile Assembly and ReSharper

谢谢,

3 个答案:

答案 0 :(得分:8)

只是......为什么?拥有大量dll会对应用启动产生性能影响(由于“融合”)。它也会非常立即受到循环引用的影响,这是坏事

由于.NET代码(默认情况下)在首次使用时会获得JIT,因此在dll中使用未在该应用程序中使用的额外类会产生巨大的影响。他们只是静静地坐在那里,对任何人都没有打扰。

每个类使用dll的纯粹管理成本将使部署等难以忍受

总而言之,我无法想到这样做的明智理由......

答案 1 :(得分:7)

您将在这里得到的答案与其他问题的答案没有什么不同:put in a separate project for each separate dll

我想问你的是你对“阶级”定义的理解是什么。每个DLL一个类可能意味着您不太熟悉程序集,命名空间和类的工作方式。

告诉我们,您真正希望能做什么?因为你认为你应该做的就是解决这个问题(例如,每个类创建一个DLL)是不切实际的。

<强>更新

考虑到您的需求的上下文(例如,Silverlight Web应用程序),我的结论是将您的类拆分为多个DLL将不会导致ASP.NET网页中的性能改进,因为:

  • DLL仅供服务器使用,通过HTTP下载到您的浏览器
  • 一旦Web应用程序加载了DLL,它就不会再次加载它 - 无论有多少用户同时使用您的站点。每个服务器一个DLL实例。
  • 当您启动Web应用程序时,它将加载所依赖的所有 DLL进行编译,无论您是否将使用它。

因此,考虑到带宽限制,根据您的要求,最好不要将Silverlight用于您的应用程序。您可以探索的途径是:

  • 学习AJAX技术,特别是JSON,(可能不是ASP.NET AJAX及其易于滥用的UpdatePanel)
  • 学习jQuery以查找将在JavaScript中实现您希望使用Silverlight
  • 执行的操作的控件

答案 2 :(得分:3)

此问题通过MSBuild的自定义脚本解决,该脚本在另一个问题中有解释。

<ItemGroup> 
  <Compile Include="Class1.cs"> 
    <Plugin>true</Plugin> 
  </Compile> 
  <Compile Include="Class2.cs" /> 
  <Compile Include="Class3.cs"> 
    <Plugin>true</Plugin> 
  </Compile> 
  <Compile Include="Program.cs" /> 
  <Compile Include="Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

Visual studio one project with several dlls as output?

感谢@franko_camron提出建议。