我使用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忽略它的原因。我确认aspnet_merge通过使用-log选项忽略,它会生成一个输入程序集列表。
我像这样调用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文件。 此外,usercontrol似乎也被编译到一个App_Web_xxxxxxxx.dll程序集中。但是,我不知道为什么相同的用户控件被编译成两个不同的程序集。也许是一个奇怪的循环引用问题?
答案 0 :(得分:0)
原来问题是由文件夹A中的一个用户控件U1引用文件夹B中的另一个控件U2,当文件夹B中的第三个控件u3引用U1时,导致循环引用。 将U2移动到文件夹A似乎解决了这个问题。