aspnet_compilerを使用してasp.netWebサイトをプリコンパイルします。次に、aspnet_mergeを実行して、プリコンパイルされたアセンブリを1つにマージします。
残念ながら、aspnet_mergeはマージプロセスにアセンブリの1つを含めません。したがって、このアセンブリは変更されません。さらに残念なことに、このアセンブリは、マージされた(そして現在は削除されている)アセンブリの1つを参照しており、この参照は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_compilerは対応する.compiledファイルを生成しないため、aspnet_mergeはApp_Web_nameofusercontrol.ascx.xxxxxxxx.dllを無視します。また、usercontrolもApp_Web_xxxxxxxx.dllアセンブリの1つにコンパイルされているようです。ただし、同じユーザーコントロールが2つの異なるアセンブリにコンパイルされる理由はわかりません。おそらく奇妙な循環参照の問題ですか?