web-dev-qa-db-ja.com

すべてのDLLを含まないVisual Studio 2010 Publish Web機能

ASP.NET MVC 2アプリケーションがあります。

  • Webプロジェクトには、SomeProjectへの参照が含まれています
  • SomeProjectには、ExternalAssembly1およびExternalAssembly2への参照が含まれています。
  • SomeProjectは明示的にExternalAssembly1を呼び出しますが、ExternalAssembly2は呼び出しません。
  • ExternalAssembly1がExternalAssembly2を呼び出す

ローカルビルドを実行すると、すべてがクールです。 DLLはすべてbin\debugフォルダーに含まれています。問題は、Visual Studio 2010で[Webの発行]コマンドを使用すると、ExternalAssembly2以外のすべてが展開されることです。

直接使用されていないアセンブリは無視されているようです(ExternalAssembly2はExternalAssembly1でのみ使用されることに注意してください)。

ExternalAssembly2を含めるようにVisual Studio 2010に指示する方法はありますか?

ExternalAssembly2を呼び出すダミーメソッドを作成できます。これは機能しますが、VS2010にDLLを公開させるという唯一の目的のために、ダミーコードを使用したくありません。

53
reustmd

これらの答えはどれも私の心には十分ではありません。これは本物のバグのようです。ハッキング以外の解決策を見つけた場合、またはマイクロソフトがバグを修正した場合は、この応答を更新します。

更新:

有望に思えません。 https://connect.Microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-includeing-all-dlls

20
manu08

私はこれと同じ問題を抱えています(ただし、アセンブリは異なります)。 Webプロジェクトでアセンブリを参照すると、それらはパブリッシュ出力に含まれますが、間接的な依存関係であるため、いずれにしても含める必要があります。

Webプロジェクト--->アセンブリA --->アセンブリB

ビルド時に、アセンブリAおよびBが\ binフォルダーに出力されます。パブリッシュ時には、アセンブリAのみがパブリッシュフォルダに出力されます。

allファイルをWebプロジェクトに含めるようにパブリッシュ設定を変更しようとしましたが、パブリッシュ出力にデプロイすべきではないファイルがあります。

これは私にはバグのようです。

7
Nicholas Cloud

VS2010とWCFサービスアプリケーションでも同じ問題が発生しました。

(直接または間接的に)参照されるDLLがGACに展開されている場合、VSパブリッシング機能はそれらを除外します。 GACからアセンブリを削除すると、パブリッシング機能が期待どおりに機能し始めました。

VSは、構築するマシンのGACにアセンブリを配置できる場合、ターゲットマシンのGACにも配置されると想定していると思います。少なくとも私の場合、この仮定は誤りです。

6
Antti Rauhala

私のテストでは、外部アセンブリがWebプロジェクトで参照されている場合、外部アセンブリが公開されることが示されています。動作させるためにダミーコードを記述する必要はありません。これは私には受け入れられるようです。

これはビジュアルスタジオのバグのようだとニコラスに同意します。少なくとも、その振る舞いの理由が何であるかを私は逃れます。

3
Stefan Egli

この問題は、Microsoft Connectのバグとして作成されました。それを経験している人が投票できる場合 https://connect.Microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-includeing-all-dlls うまくいけば、それについて何かをします。

3
tgallard

ここで新しい接続バグを作成しました https://connect.Microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-includeing-all-dlls

この問題を再現するための解決策と詳細な手順も添付しました。今回はCa n't Reproduceとして閉じないことを期待しましょう。

DLLが見つからない問題が発生した場合は、この接続の問題に投票してください。

2
mdonatas

ローカルコピーはトリックをしました。 Newtonsoft.Jsonアセンブリがdeploymenyパッケージに含まれるという問題がありました。ローカルコピーはfalseに設定されていました。

2

あなたがまだこれを見ているかどうかはわかりませんが、 このMSDN記事 で解決策を見つけました(まったく同じ問題がありました)。ファイルの[ビルドアクション]の下で、[コンテンツ]を選択します。このコンテンツは、パブリッシュがもたらすファイルのリストに含める必要があります。

2

ExternalAssembly2参照プロパティリストに移動し、「ローカルのコピー」を「True」に変更すると、問題が解決する可能性があります。

2
Paul Lemke

私の場合、それはかなりトリッキーです。プロジェクトのビルドにはExternalAssembly2への参照は必要ありませんが、リフレクションを使用してUnityコンテナーを構成するため、ランタイムには不可欠です。だから、私は参照を削除します-プロジェクトを正常にビルドしますが、実行時エラーが発生します。参照を保存すると、アプリケーションをビルドして実行できますが、ExternalAssembly2で公開できないため、実行時例外も取得します。これは、内部VS2010アセンブリの最適化が原因で発生します。

では、ここで何ができるでしょうか。 1.不要なコードを入れて、ExternalAssembly2のクラスを使用します。 2.リフレクションから脱出し、静的アセンブリリンクを使用します。

これがsmbdに役立つことを願っています。

1
Igor

今日も同じ問題がありました。私は自分のWebプロジェクトを公開しましたが、参照DLLのすべてがそこにあるわけではないことに気付きました。特に、間接DLL参照。

公開先のディレクトリがディスク容量(ネットワーク共有)を超えていることがわかりました。いくつかの間接参照DLLを除いて、すべてのファイルを公開するのに十分なスペースがありました。悲しいことに、VS08はエラーをスローしませんでした。公開されたばかりのファイルが通常です。 HDDスペースをいくつか空けたところ、すべて問題なく動作しました。

DLLを手動で移動しようとするまで、HDDスペースの問題は見つかりませんでした。

1
EbbnFlow

Webプロジェクトで同じ種類の問題が発生しています。アセンブリBを参照するアセンブリAを参照するWebプロジェクトがあります。しばらくの間は問題なく動作しましたが、今日は壊れていました。私はソリューションの再構築を行い、今回はすべてを正しく展開しました。

1
NJ3181

同じ問題が発生しました。Webプロジェクト->カスタムプロジェクト-> Assembly1->(間接的に)Assembly2のような参照リンクがある場合、これはVS2010のバグです。

とりあえず、WebプロジェクトでAssembly1を参照すると、Assembly2がbinフォルダーに含まれます。したがって、次のような追加の参照リンクを追加する必要がありました:Webプロジェクト-> Assembly1->(間接的に)Assembly2。次に、VSはAssembly2を認識し、そのdllファイルをパブリッシュアクションに含めることができます。

0
Chris Li