【问题标题】:2.0/3.5 assemblies side-by-side2.0/3.5 并排组装
【发布时间】:2010-11-02 13:26:16
【问题描述】:

我有一个 Web 应用程序,我希望将来自两个独立提供程序的程序集中的功能集成在一起。一组 (Set1) 程序集基于 .NET 2.0 构建,而另一组 (Set2) 程序集绝对 需要 .NET 3.5。为了使 Set2 程序集正常工作,我必须在 web.config 中添加一个 (system.codedom) 部分并指定 v3.5 编译器。但是,这似乎破坏了引用 Set1 程序集的代码(JIT 编译器需要永远并且请求超时)。当我删除 system.codedom 部分时,引用 Set2 的应用程序的某些功能会失败。

我们开始这个项目时知道 .NET 2.0 和 3.5 可以毫无问题地共存。有什么办法可以让这两组程序集很好玩吗?

编辑:这是 system.codedom 部分的样子;

  <system.codedom>
<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="WarnAsError" value="false"/>
  </compiler>
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="OptionInfer" value="true"/>
    <providerOption name="WarnAsError" value="false"/>
  </compiler>
</compilers>

【问题讨论】:

  • 你能在 .Net 3.5 中重新编译 Set1 吗?
  • .NET 2.0 和 3.5 可以共存,只要一个应用程序以 2.0 运行,另一个以 3.5 运行,因此加载了两个运行时。在一个应用程序(进程)中,您只能使用一个版本。

标签: .net-3.5 .net-2.0


【解决方案1】:

我也发生过同样的事情,但那是在运行 .net 3.5 / vs2008 的测试版时。如前所述,3.5 只是一个“附加组件”。

【讨论】:

    【解决方案2】:

    CLR 在 2.0 和 3.5 之间没有变化 - 核心 BCL 也没有。 3.0 和 3.5 仅添加新内容 - 它们应该与 2.0 完全兼容。

    See link for more info (red/green bits).

    【讨论】:

    • 我也是这么想的!现在要弄清楚问题可能出在哪里。
    【解决方案3】:

    .NET Web 应用程序 (ASP.NET) 没有“3.5 运行时”。 ASP.NET 3.5 应用程序在 2.0 运行时上运行,而 3.5 的“东西”只是添加了必须安装在机器上的库。

    您确定运行它的服务器上已安装 3.5 吗?

    您是否正在重新编译自己的 Web 应用程序?还是只是更改配置文件?你的应用是什么类型的项目?网站项目?网络应用项目?

    【讨论】:

    • 它是一个网站项目,正在编译的代码是 App_Code 和 aspx 代码隐藏
    【解决方案4】:

    如果您的应用程序域是在 .NET 2.0 中启动的,则只有 .NET 2.0 程序集能够加载。如果您的应用程序域是在 .NET 3.5 中启动的,您将能够毫无问题地加载 .NET 2.0 和 .NET 3.5 程序集。

    因此,假设您创建了一个 Windows 应用程序项目并将您的目标设置为 .NET 2.0,您将无法加载 .NET 3.5 程序集。如果您将项目定位到 .NET 3.5,2.0 程序集和 3.5 程序集将毫无问题地加载。

    【讨论】:

    • 没关系。似乎 Set1 无法在 .NET 3.5 中重新编译,而调用 Set2 的是 Set1。除非 Set1 在 .NET 3.5 中重新编译,或者 Set2 在 .NET 2.0 中重新编译,否则我认为不会发生这种情况。
    • 澄清一下,这两组程序集不会相互调用,它是引用这两组程序集的 App_Code 和 aspx 页面中的代码。
    • 检查您的顶级被调用者(启动 AppDomain 的那个)以及是否可以使该代码以 .NET 3.5 为目标。
    • 所以说我在 Global.asax (Application_Start) 中添加了一行来调用一些 .NET 3.5 功能,这可能会解决它吗?
    • 很遗憾,我对 ASPX 与 WinForms 的了解不够,无法回答您的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 2010-11-18
    • 2011-07-31
    • 1970-01-01
    • 2022-11-03
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多