ASP.NET预编译无法合并单个用户控件

时间:2009-12-01 14:24:33

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

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

在预编译阶段,用户控件将编译为未合并到最终WebSite.dll程序集中的程序集。最终输出包含:

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

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

这种行为可能是什么原因?

2 个答案:

答案 0 :(得分:0)

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

在我的情况下,我能够将-fixednames标记添加到aspnet_compile调用,这会将所有控件库生成为App_Web_[control_name].[hex].dll,这使得它们对{{1}都可见删除了程序集加载错误。

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

答案 1 :(得分:-2)

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