2014-01-12 14 views
10

んbin /ディレクトリに私はMyProject.dllはというファイルを参照してください.configは、ビルド時にweb.configファイルを表します。のVisual Studio copysの.configファイルが、私は、Visual Studioでプロジェクトをビルドする場合MSBuildのは、私は、Visual Studioの2013年WebAPIのプロジェクトを持ってい

私は、コマンドラインからMSBuildのを実行する場合は、.configファイルが欠落しているが、他のすべてのファイルが存在しています。

> msbuild.exe /t:build /v:q /p:Configuration=Debug /nologo \ 
    D:\Workspace\MyProject\src\MyProject.sln 

何が得られますか? .configがコピーされないのはなぜですか?

+0

これはこれに関連していますか? http://stackoverflow.com/q/21745579/130352 ...その質問とは反対の問題があるようですが、根本的な原因は同じかもしれません。 –

答えて

1

WebAPIプロジェクトを作成すると、web.config Copy to Output DirectoryはデフォルトでDo Not Copyに設定されます。ソリューションエクスプローラでWeb.configを選択し、これをコピーアクションに設定しましたか?

私はIDEのビルドではなく、あなたが表示され、CMDのMSBuildであなたのためにコピーするようだ理由を説明するために途方に暮れてよ、これは私が2013年

+1

これは面白いです。だから私はまったく新しいWebAPIプロジェクトを最初から作りました。 VS 2013(v 12.0.21005.1 REL)。私は私の他のプロジェクトと同じ動作を観察します。私がVSからビルドすると、myproject.dll.configが取得されます。上記のmsbuildコマンドを使用してディレクトリを消去すると、設定ファイル以外はすべて取得できます。文字通り、設定ファイル以外のすべて - 私がVSに入り、再構築すると、bin /ディレクトリに.configファイルが1つ追加されます。 – Matt

+0

Web.configを 'Copy to Output Directory'に設定すると、実際には実際のWebをコピーします。configと同様にデフォルトの変換...しかし、それはmyproject.dll.configという名前ではありません。実際には、VSは引き続き.dll.config、*、*を生成し、msbuildは.dll.configをスキップしますが、Web。* .configファイルをコピーします。 – Matt

+0

興味深い、私は同じ正確なバージョン:)。ログにmsbuildを/flp:logfile="{yourPathTologFile.log}";verbosity=diagnosticを追加して使用してください。 dll.configで「コピー」タスクやその他のさまざまなアクティビティが表示されます。 – JohnZaj

3

に新鮮なWebAPIのプロジェクトを見動作ではありませんWebプロジェクトまたはWeb APIプロジェクトをデプロイする場合、$(TargetName)$(TargetExt).configが存在しないということは大きな問題ではありません。実行時に、IISはWeb.configを使用して、アセンブリに必要なすべてのものを把握します。

BUT!

あなたは*テストのための基礎として、WebアプリケーションまたはWeb APIプロジェクトを使用しているなら、あなたは、いくつかの思わぬ障害を打つことができます。特に、アセンブリーバインディングのリダイレクト(MVCの腸内の何かの場合、Newtonsoft.Json 4.5.0に依存していますが、現在のバージョンは7.0.0です)。同僚はテストプロジェクトに依存していた別のアセンブリで同様の問題を抱えていました。

Visual Studio(Resharperなど)でテストを実行すると、すべてうまく動作します。ただし、テストがCIサーバーに到達し、nunit-consoleによって実行されると、アセンブリのロードエラーが表示されます。綺麗ではない。これは、説明されている動作のためにVSが適切な出力に.configファイルを巧みにコピーしていて、msbuildがそうでないためです。ただし、ビルド後のビルドイベントでこれを回避することができます。

コピー$(PROJECTDIR)のWeb.Config $(TARGETDIR)$(TargetNameは)$(TargetExtは)これは私の問題を解決した

をを.configリダイレクトを伴う私はそれが他の人を助けることを望む。

  • 「なぜWebアプリケーションまたはWeb APIプロジェクトをテストプロジェクトとして使用するのですか?」と尋ねることがあります。 Web *プロジェクトは、.NETアセンブリとJavaScriptテストを扱うテストプロジェクトのベースとして、JavaScriptが適切に認識されている(構文の強調表示)ように扱うのがずっと楽になります。スクリプトフォルダには、 Javascript File "メニュー項目を使用するので、私はプレーンクラスライブラリプロジェクトの代わりにこれを使用することをお勧めします。
+0

これは受け入れられたアンカーである必要があります。明らかなバグは機能であり、dll.configが問題を作成しない限り、無視してください。あなたのプロダクションサーバにそれを配備しないでください:) – Rolf

関連する問題