2011-09-16 16 views
5

thisによれば、ソリューションの外部でプロジェクトを参照し、VSとコマンドラインでは動作しますが、TFSでは動作しないようにする必要があります。VS2010のソリューション外部のプロジェクト参照

残念ながら、この方法で私のソリューションをパーティション化しようとすると、VS2010/devenvでもmsbuildでも動作しませんでした。

どちらの場合も、エラーが発生しました:

OutputPathプロパティがプロジェクトのCommon.csproj」のために設定されていません。 このプロジェクトでは、コンフィグレーションとプラットフォームの有効な組み合わせ が指定されていることを確認してください。 Configuration = 'Debug' プラットフォーム= 'AnyCPU'。他のプロジェクト がこのプロジェクトへのプロジェクトからプロジェクトへの参照に従おうとしているときに表示されます。 このプロジェクトはアンロードされているか、ソリューションには含まれていません。 参照プロジェクトは同じプロジェクトまたはそれに相当するコンフィグレーションまたはプラットフォームです。

しかし、現在のプラットフォームは「x86」で、VSやmsbuildで設定したプラットフォームや設定に関係なく、常にDebug|AnyCPUを試しています。 msbuildの場合、/p:OutputPath=bin\x86\Debugに設定すると、子プロジェクトに正しく伝搬されます。

これはバグですか?回避できますか?

UPDATE

bug in MS Connectを発見しました。 :(

UPDATE 2

見つかり回避策を修正されません残念ながら閉鎖さ:ShouldUnsetParentConfigurationAndPlatform=falseを設定MSBuildのためのコマンドラインで、プロジェクトファイルの両方に(任意の輸入前)のVisual Studioを修正するために

答えて

0

私が問題を正しく理解しているのは、実際には、AssignProjectConfigurationターゲットがこれらのプロジェクトの設定/プラットフォームプロパティを正しく設定していないためです。

設定とプラットフォームがわかっていれば、方法は単にAssignProjectConfigurationターゲットの直後に実行するターゲットを挿入し、未解決の(ソリューション構成の一部ではない)プロジェクト間参照を表す各項目のSetConfigurationおよびSetPlatformプロパティをオーバーライドします。

いくつかの愚かな理由のために、マイクロソフトが提供する対象は、2つのオプションであなたを残し解決するもの(ただし、どこも)同じコレクション内の未解決のプロジェクト参照のリストを、格納します。ただ、設定

  1. を各プロジェクトのプロパティを手動で(つまり、注入されたターゲット内の動的なItemGroup要素を介してハードコーディングする)。
  2. 注入されたターゲットからAssignProjectConfigurationタスクを呼び出し、割り当てられていない出力を収集して、選択したすべてのデフォルト設定/プラットフォームを割り当てます。あなたが正しく設定プロジェクト参照のリストを持っていたら

いずれかの方法で、あなたは、単に削除して、別のダイナミックItemGroup要素を使用して手動で変更カウンターパートとProjectReferenceWithConfiguration項目グループ(未解決のアイテムを置き換えることができ、その後、インクルード)。

あなたのことを心からお祈りください。製品を複数のソリューションに分割したい場合は、各ソリューションが共通のステージング領域に共有出力を公開し、それらをリンクする.projスクリプトを用意するだけです。私は、コマンドラインスタイルのMSBuildと内部VSスタイルのMSBuildが混在しないという難しい方法を学びました(MSBuild以外のプロジェクトシステムとの相互運用性を確保するためにいくつかの奇妙な妥協をしましたが、AssignProjectConfiguration-VS -provided-solution-config-XMLプロセスは1つです)。

+0

。 –

0

私はVS2012で似たようなものを見つけました。私にとっては、AssignProjectConfigurationターゲットのShouldUnsetParentConfigurationAndPlatformプロパティが、真のに設定されていることに関連していました。これにより、 "GlobalPropertiesToRemove = Configuration; Platform"が発生し、プロジェクト参照用に構成プロパティとプラットフォームプロパティがクリアされました。

[ツール] - > [オプション] - > [プロジェクトとソリューション] - > [ビルドと実行] - > [MSBuildプロジェクトのビルド出力詳細] - > [診断]を設定した後、ビルド出力ウィンドウを調べると、空白の設定/プラットフォームで

、これもリリースビルドのプロジェクト出力にデバッグ・アセンブリで、その結果、一致するように、私のプロジェクトのいくつかに次の行を引き起こしたが:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 

ソリューションを変更することでしたコンフィギュレーション変数が空白/空だったときに使用するための構成として、リリースを指定するには、それらのcsprojファイル:私は別のソリューションを選択しているものの、その答えとしてマーク

<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration> 
関連する問題