0

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つの異なるアセンブリにコンパイルされる理由はわかりません。おそらく奇妙な循環参照の問題ですか?

4

1 に答える 1

0

この問題は、フォルダーAの1つのユーザーコントロールU1がフォルダーBの別のコントロールU2を参照しているときに、フォルダーBの3番目のコントロールu3がU1を参照し、循環参照が発生したことが原因であることがわかりました。U2をフォルダAに移動すると、問題が解決するようです。

于 2012-06-22T17:13:30.000 に答える