【问题标题】:Can I separate a big dll into 1 dll per class?我可以将一个大 dll 分成每个类 1 个 dll 吗?
【发布时间】:2010-10-22 12:33:13
【问题描述】:

来自Can I build 2 or more dlls from C# project in Visual Studio 2008?,我有另一个想法,只创建一个大项目。之后,我通过使用构建后事件调用 Win 应用程序项目(用于单独的大 dll)将一个项目 dll(包含许多类。)分成每个类 1 个 dll。如何做到这一点?

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

更新 我找到了一些技巧,可以指导我通过 custom build 解决这个问题?此外,我认为我可以创建自定义处理程序,使用单独的模块文件和 al.exe 生成动态程序集文件。但是这个功能超出了我的预期和不必要(源代码很少更改)。

Multi-file Assemblies: What and How

How to: Build a Multifile Assembly

POCO Custom Multifile Assembly and ReSharper

谢谢,

【问题讨论】:

  • 你为什么要这样做?
  • 如果您强调这是为了 Silverlight 控件的目的,我认为您会得到更好的答案...
  • 如果你有大网站使用silverlight显示,你会花很长时间加载主页。
  • 那么也许真正的答案是你不应该使用 Silverlight 来做你正在做的事情?
  • 本站已有答案,请看following solution

标签: c# visual-studio dll


【解决方案1】:

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

由于 .NET 代码(默认情况下)在第一次使用时会进行 JIT 处理,因此在 dll 中包含额外的类而不会在该应用程序中使用的影响很大。他们只是静静地坐在那里,不打扰任何人。

每个类都有一个 dll 的绝对管理成本将使部署等痛苦

总而言之,我想不出这样做的合理理由......

【讨论】:

  • 因为我想创建类似 webform 的 Silverlight 应用程序(1 个 Silverlight 用户控件等于 1 个网页)。所以,我需要为 1 个 Silverlight 用户控件创建 1 个 dll。
  • 我偶尔会分离出像 DAL 这样的大类来缩短 BLL 类的构建时间。但是要为每个班级都这样做,你是对的;没有“合理的理由”。
  • 这是真的。对于所有在一个地方的应用程序,这个想法是不必要的。但是对于服务器/客户端应用程序,这个想法很棒,如果它是真的(创建silverlight页面几乎等于创建网页)。
【解决方案2】:

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

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

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

更新

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

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

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

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

【讨论】:

  • 您可能想添加指向相关问题的链接
  • 换句话说“你一直在问这个问题。我不认为它意味着你认为它的意思!” :)
  • 从我的老问题,我可以创建很多项目来解决这个问题。但是,很难在 1 个解决方案中管理大量项目(100 多个)。
  • 但是为什么首先每个 DLL 需要 1 个类?
  • 因为启动页面可以部分加载用户想要查看的所有页面。我认为,这是唯一一个在首次加载时间和智能 RIA 之间匹配的想法。
【解决方案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 的建议。

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2021-04-05
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多