53

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

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

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

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

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

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

4

13 に答える 13

20

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

アップデート:

有望ではないようです。 https://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-include-all-dlls

于 2010-05-24T15:14:14.293 に答える
7

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

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

ビルド時に、アセンブリ A と B が \bin フォルダーに出力されます。発行時に、アセンブリ A のみが発行フォルダーに出力されます。

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

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

于 2010-05-15T16:20:53.013 に答える
6

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

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

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

于 2012-06-13T10:48:26.810 に答える
3

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

これはビジュアル スタジオのバグであると思われるニコラスに同意します。少なくとも、その行動の理由が何であるかはわかりません。

于 2010-05-18T19:10:21.883 に答える
3

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

于 2011-01-20T09:59:25.043 に答える
2

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

于 2010-10-04T15:42:46.863 に答える
2

ここに新しい Connect バグを作成しましたhttps://connect.microsoft.com/VisualStudio/feedback/details/731303/publish-web-feature-not-included-all-dlls

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

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

于 2012-03-15T08:37:36.587 に答える
2

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

于 2014-02-04T08:56:06.507 に答える
2

ExternalAssembly2 参照プロパティ リストに移動し、"Copy Local" を "True" に変更すると、問題が解決する可能性があります。

于 2010-05-14T15:01:53.833 に答える
1

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

では、ここで何ができるでしょうか。1. ExternalAssembly2 のクラスを使用するために、不要なコードを追加します。2. リフレクションを回避し、静的アセンブリ リンクを使用します。

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

于 2012-06-19T12:47:13.287 に答える
1

Web プロジェクトで同じタイプの問題が発生しています。アセンブリ B を参照するアセンブリ A を参照する Web プロジェクトがあります。しばらくの間は正常に機能していましたが、今日は壊れていました。ソリューションを再構築したところ、今回はすべてが正しく展開されました。

于 2011-03-03T21:01:32.483 に答える
1

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

パブリッシュ先のディレクトリのディスク領域 (ネットワーク共有) が不足していることが判明しました。いくつかの間接参照 DLL を除いて、すべてのファイルを公開するのに十分なスペースがありました。悲しいことに、VS08 はエラーをスローしませんでした。公開したばかりのファイルは通常のものです。HDD の空き容量を確保したところ、問題なく動作しました。

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

于 2011-07-11T19:06:46.713 に答える
0

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

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

于 2011-01-18T11:13:28.777 に答える