0

我使用 aspnet_compiler 来预编译一个 asp.net 网站。然后,我运行 aspnet_merge 将预编译的程序集合并为一个。

不幸的是,aspnet_merge 在其合并过程中不包括其中一个程序集。因此,该组件保持不变。更不幸的是,这个程序集引用了一个确实被合并(现在已被删除)的程序集,并且这个引用没有被 aspnet_merge 更新。因此,当使用此 dll 时,我得到一个FileNotFoundException“无法加载文件或程序集” 。

到目前为止,我发现在预编译步骤之后,大多数程序集都被命名为

App_Web_xxxxxxxx.dll. 

而有问题的 dll 的名称如下:

App_Web_nameofusercontrol.ascx.xxxxxxxx.dll

我想这就是 aspnet_merge 忽略它的原因。我通过使用 -log 选项确认 aspnet_merge 会忽略它,它会生成一个输入程序集列表。

我这样调用 aspnet_compiler 和 aspnet_merge :

aspnet_compiler.exe -v VirtualDirectoryName -p ActualDirectory c:\precompileoutput
aspnet_merge.exe c:\precompileoutput -o mergeddllname

我目前正在查看反编译的 aspnet_merge 代码,试图弄清楚它在决定合并哪些 dll 时采用什么逻辑,但也许有人以前见过这个问题或有建议?

我正在寻找一种方法让 aspnet_compiler 生成 aspnet_merge 理解的 dll,或者让 aspnet_merge 更新所有引用它删除的任何 app_web* dll 的程序集。谢谢!

更新:aspnet_merge 忽略 App_Web_nameofusercontrol.ascx.xxxxxxxx.dll,因为 aspnet_compiler 不会生成相应的 .compiled 文件。此外,用户控件似乎也被编译到 App_Web_xxxxxxxx.dll 程序集中之一。但是,我不知道为什么同一个用户控件被编译成两个不同的程序集。也许是一个奇怪的循环引用问题?

4

1 回答 1

0

结果发现问题是由文件夹 A 中的一个用户控件 U1 引用文件夹 B 中的另一个控件 U2 引起的,而文件夹 B 中的第三个控件 u3 引用了 U1,从而导致循环引用。将 U2 移动到文件夹 A 似乎可以解决问题。

于 2012-06-22T17:13:30.000 回答