我使用 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 程序集中之一。但是,我不知道为什么同一个用户控件被编译成两个不同的程序集。也许是一个奇怪的循环引用问题?