【问题标题】:ASP.NET precompile fails to merge a single user controlASP.NET 预编译无法合并单个用户控件
【发布时间】:2009-12-01 14:24:33
【问题描述】:

我有相当大的第三方 ASP.NET 网站项目,我使用 MSBuild 和 Microsoft Web 部署目标进行预编译和合并。我不预编译 .aspx 和 .ascx 文件,只预编译代码文件。

在预编译阶段,用户控件被编译成一个程序集,该程序集没有合并到最终的 WebSite.dll 程序集中。最终输出包含:

  • WebSite.dll
  • App_Web_selectsinglepath.ascx.73690ebc.dll

所有其他用户控件都被编译成名称如 App_Web_abcdefgh.dll 的程序集,这些程序集被合并到 WebSIte.dll 中,只是这个控件没有。

此行为的原因可能是什么?

【问题讨论】:

  • 你能发布构建输出吗?

标签: asp.net compilation web-deployment-project


【解决方案1】:

我在尝试从命令行为 Web App 项目使用 aspnet_compileaspnet_merge 时遇到了类似的问题。两个控件将始终具有命名程序集而不是 App_Web_[hex].dll,然后在合并后将无法加载。

在我的例子中,我能够将-fixednames 标志添加到aspnet_compile 调用中,这会将所有控件库生成为App_Web_[control_name].[hex].dll,这使得它们都对aspnet_merge 可见,从而消除了程序集加载错误。

我仍然不明白为什么这些控件会始终以不同的文件名模式生成(层次结构中没有重复的页面或控件名称),但是有人。

【讨论】:

    【解决方案2】:

    用户控件被编译成单独的程序集,因为这允许您将用户控件视为 Web 控件。您可以使用 ILMerge 实用程序将多个程序集合并为一个。这里是a good page explaining this.

    【讨论】:

    • 谢谢,但这不是我要问的。
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 2017-03-09
    • 2011-03-23
    相关资源
    最近更新 更多