2017-11-29 20 views
0

を切り替える:NetCoreコマンドラインビルドとだから私は、次の構造を持つプロジェクト持って

syntax: Project (Assembly Name) - P1 (Assembly-1) - P2.A (Assembly-2) - P2.B (Assembly-2) - P3 (Assembly-3)

餌を容易にし、どこP2.AとP2を切り替えるようにした点そのうちを。 Bはどちらも同じアセンブリ名を持っています。

Proj依存関係は、P3が他のすべての依存関係になるようなものです。 P1はP2.A(餌)に依存するネット標準プロジェクトであり、アセンブリは期待通りにそれぞれのプラットフォームでP2.Bとスワップされます

今私が依存していないこの解決策ナゲットパッケージではなく、プロジェクトに直接、P1、P2.B、P3に依存するUnitTestプロジェクトがあります。

これをVisual Studioでコンパイルすると、期待通りに動作します(この部分でも、P2.Bのアセンブリが出力フォルダに最後に転送され、P1が依存するP2.Aではなく、どんな理由であれこれが働く)。しかし、私がちょうどコマンドラインからdotnet buildを実行しようとすると、それはerror : Cannot find project info for '**\P2.A.csproj'. This can indicate a missing project reference.の行に沿って失敗します。私はどこかのアセンブリ名がプロジェクトP2.AとP2.Bの間で同じであると推測しています。 。

私が単体テストプロジェクトをP2.Bに応じて直接削除しても、それはコマンドラインからうまく動作しますが、それでもベイトDLLが残っています。

ビジュアルスタジオやコマンドラインと動作が異なる理由がわかりません。

私はまた、P2.Bへの直接の依存関係を削除し、代わりにAfterTargets = "Build"のmsbuild TargetをセットアップしてP2.Bのビルドをトリガし、それに応じて出力パスを提供するようにしました。ユニットテストプロジェクトの出力フォルダ。このようなことは、スイッチが発生し、dotnet build/testが正常に動作する場所で機能します。指定されたランタイムでビルドすると失敗するerror : Assets file '**\P2.B\obj\project.assets.json' doesn't have a target for '.NETStandard,Version=v1.2/win10-x64'ビルドターゲット設定後にカスタムMSBuildターゲットを削除した場合、ofcは正常に動作するP2.B

これを解決するためのあらゆる指針は非常に役に立ちます。

おかげ

それが助け場合、私は、他の誰かが餌とスイッチのため、同様の問題に実行されます念のためのVisual Studio 2017(15.4.1)DOTNETのSDK(2.0.2)

+0

サンプルを作成しましたが、この問題を再現できませんでした。何か問題があったかどうかはわかりません。この問題を再現できるように簡単なテストサンプルを教えていただけますか? – Alex

+0

@Judy soz私はこれを逃した。私は実際に2番目の問題が解決されたので、答えに言及したようにそのルートを経由しました。 – Viv

答えて

0

を使用しています2番目の問題(custom target for after build but issue with building with a specified runtime then fails)が解決されました。このエラーは、Restoreターゲットビルドトリガーの欠落の原因と思われました。

だから、これが機能するように取得する:

  • 私は、ユニットテストプロジェクト
  • の直接のプロジェクト参照の依存関係として以下のように追加され、「スイッチ」のlib(P2.B)を削除カスタムターゲット

ネットコアユニットテストプロジェクトでは、csprojその後、

<Target Name="BaitAndSwitchTarget" AfterTargets="Build"> 
    <PropertyGroup> 
    <LinkedProject>..\P2.B\P2.B.csproj</LinkedProject> 
    </PropertyGroup> 
    <MSBuild Condition="'$(LinkedProject)' != '' " Projects="$(LinkedProject)" Targets="Restore" /> 
    <MSBuild Condition="'$(LinkedProject)' != '' " Projects="$(LinkedProject)" Targets="Build" Properties="OutputPath=..\$(MSBuildProjectName)\$(OutputPath)" /> 
</Target> 

これは、本質的に後のビルドステップとユニットテストプロジェクトの出力フォルダに配置しますように、スイッチのターゲットを構築し、CLIからうまくdotnet build/test/...作品のように見えます。

+0

ここであなたのソリューションを共有してくれてありがとうと助けてくれてありがとう。答えとしてマークすることができるので、同じ問題を抱える他のコミュニティメンバーに役立つかもしれません。 – Alex

関連する問題