ASP.NET MVC 2アプリケーションがあります。
ローカルビルドを実行すると、すべてがクールです。 DLLはすべてbin\debugフォルダーに含まれています。問題は、Visual Studio 2010で[Webの発行]コマンドを使用すると、ExternalAssembly2以外のすべてが展開されることです。
直接使用されていないアセンブリは無視されているようです(ExternalAssembly2はExternalAssembly1でのみ使用されることに注意してください)。
ExternalAssembly2を含めるようにVisual Studio 2010に指示する方法はありますか?
ExternalAssembly2を呼び出すダミーメソッドを作成できます。これは機能しますが、VS2010にDLLを公開させるという唯一の目的のために、ダミーコードを使用したくありません。
これらの答えはどれも私の心には十分ではありません。これは本物のバグのようです。ハッキング以外の解決策を見つけた場合、またはマイクロソフトがバグを修正した場合は、この応答を更新します。
更新:
私はこれと同じ問題を抱えています(ただし、アセンブリは異なります)。 Webプロジェクトでアセンブリを参照すると、それらはパブリッシュ出力に含まれますが、間接的な依存関係であるため、いずれにしても含める必要があります。
Webプロジェクト--->アセンブリA --->アセンブリB
ビルド時に、アセンブリAおよびBが\ binフォルダーに出力されます。パブリッシュ時には、アセンブリAのみがパブリッシュフォルダに出力されます。
allファイルをWebプロジェクトに含めるようにパブリッシュ設定を変更しようとしましたが、パブリッシュ出力にデプロイすべきではないファイルがあります。
これは私にはバグのようです。
VS2010とWCFサービスアプリケーションでも同じ問題が発生しました。
(直接または間接的に)参照されるDLLがGACに展開されている場合、VSパブリッシング機能はそれらを除外します。 GACからアセンブリを削除すると、パブリッシング機能が期待どおりに機能し始めました。
VSは、構築するマシンのGACにアセンブリを配置できる場合、ターゲットマシンのGACにも配置されると想定していると思います。少なくとも私の場合、この仮定は誤りです。
私のテストでは、外部アセンブリがWebプロジェクトで参照されている場合、外部アセンブリが公開されることが示されています。動作させるためにダミーコードを記述する必要はありません。これは私には受け入れられるようです。
これはビジュアルスタジオのバグのようだとニコラスに同意します。少なくとも、その振る舞いの理由が何であるかを私は逃れます。
この問題は、Microsoft Connectのバグとして作成されました。それを経験している人が投票できる場合 https://connect.Microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-includeing-all-dlls うまくいけば、それについて何かをします。
ここで新しい接続バグを作成しました https://connect.Microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-includeing-all-dlls
この問題を再現するための解決策と詳細な手順も添付しました。今回はCa n't Reproduceとして閉じないことを期待しましょう。
DLLが見つからない問題が発生した場合は、この接続の問題に投票してください。
ローカルコピーはトリックをしました。 Newtonsoft.Jsonアセンブリがdeploymenyパッケージに含まれるという問題がありました。ローカルコピーはfalseに設定されていました。
あなたがまだこれを見ているかどうかはわかりませんが、 このMSDN記事 で解決策を見つけました(まったく同じ問題がありました)。ファイルの[ビルドアクション]の下で、[コンテンツ]を選択します。このコンテンツは、パブリッシュがもたらすファイルのリストに含める必要があります。
ExternalAssembly2参照プロパティリストに移動し、「ローカルのコピー」を「True」に変更すると、問題が解決する可能性があります。
私の場合、それはかなりトリッキーです。プロジェクトのビルドにはExternalAssembly2への参照は必要ありませんが、リフレクションを使用してUnityコンテナーを構成するため、ランタイムには不可欠です。だから、私は参照を削除します-プロジェクトを正常にビルドしますが、実行時エラーが発生します。参照を保存すると、アプリケーションをビルドして実行できますが、ExternalAssembly2で公開できないため、実行時例外も取得します。これは、内部VS2010アセンブリの最適化が原因で発生します。
では、ここで何ができるでしょうか。 1.不要なコードを入れて、ExternalAssembly2のクラスを使用します。 2.リフレクションから脱出し、静的アセンブリリンクを使用します。
これがsmbdに役立つことを願っています。
今日も同じ問題がありました。私は自分のWebプロジェクトを公開しましたが、参照DLLのすべてがそこにあるわけではないことに気付きました。特に、間接DLL参照。
公開先のディレクトリがディスク容量(ネットワーク共有)を超えていることがわかりました。いくつかの間接参照DLLを除いて、すべてのファイルを公開するのに十分なスペースがありました。悲しいことに、VS08はエラーをスローしませんでした。公開されたばかりのファイルが通常です。 HDDスペースをいくつか空けたところ、すべて問題なく動作しました。
DLLを手動で移動しようとするまで、HDDスペースの問題は見つかりませんでした。
Webプロジェクトで同じ種類の問題が発生しています。アセンブリBを参照するアセンブリAを参照するWebプロジェクトがあります。しばらくの間は問題なく動作しましたが、今日は壊れていました。私はソリューションの再構築を行い、今回はすべてを正しく展開しました。
同じ問題が発生しました。Webプロジェクト->カスタムプロジェクト-> Assembly1->(間接的に)Assembly2のような参照リンクがある場合、これはVS2010のバグです。
とりあえず、WebプロジェクトでAssembly1を参照すると、Assembly2がbinフォルダーに含まれます。したがって、次のような追加の参照リンクを追加する必要がありました:Webプロジェクト-> Assembly1->(間接的に)Assembly2。次に、VSはAssembly2を認識し、そのdllファイルをパブリッシュアクションに含めることができます。