4

構成のある3つのプロジェクトがあります:

  • プロジェクト A: デバッグ|AnyCPU、リリース|AnyCPU
  • プロジェクト B: デバッグ|AnyCPU、リリース|AnyCPU
  • プロジェクト C: デバッグ|x86、デバッグ|x64、リリース|x86、リリース|x64

プロジェクト C には依存関係に B があり、B には依存関係に A があります。(A <- B <- C)

*.bat ファイルを使用して、コマンド ラインからビルドします。

msbuild A.csproj /target:Build /property:Configuration=Debug;Platform=AnyCPU /verbosity:minimal
msbuild A.csproj /target:Build /property:Configuration=Release;Platform=AnyCPU /verbosity:minimal<br/>
msbuild B.csproj /target:Build /property:Configuration=Debug;Platform=AnyCPU /verbosity:minimal
msbuild B.csproj /target:Build /property:Configuration=Release;Platform=AnyCPU /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Debug;Platform=x86 /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Release;Platform=x86 /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Debug;Platform=x64 /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Release;Platform=x64 /verbosity:minimal

エラーを受け取ります:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(609,5): エラー: プロジェクト 'A.csproj' の OutputPath プロパティが設定されていません。このプロジェクトの構成とプラットフォームの有効な組み合わせを指定したことを確認してください。構成='デバッグ' プラットフォーム='x86'. このメッセージが表示されるのは、ソリューション ファイルを使用せずにプロジェクトをビルドしようとしており、このプロジェクトに存在しない既定以外の構成またはプラットフォームを指定したためです。[A.csproj] C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(609,5): エラー: プロジェクト 'B.csproj' の OutputPath プロパティが設定されていません。このプロジェクトの構成とプラットフォームの有効な組み合わせを指定したことを確認してください。構成='デバッグ' プラットフォーム='x86'. このメッセージが表示されるのは、ソリューション ファイルを使用せずにプロジェクトをビルドしようとしており、このプロジェクトに存在しない既定以外の構成またはプラットフォームを指定したためです。[B.csproj]

4

3 に答える 3

5

私の問題の解決策を見つけました。Visual Studio または MSBuild を介してビルドを検出するには、*.csproj ファイルの Choose 要素を使用し、MSBuild には (ProjectReference ではなく) Reference を使用します。

<Choose>
  <When Condition="'$(BuildingInsideVisualStudio)' == 'true'">
    <ItemGroup>
      <ProjectReference Include="A.csproj">
        <Project>{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}</Project>
        <Name>A</Name>
        <Private>True</Private>
      </ProjectReference>
      <ProjectReference Include="B.csproj">
        <Project>{BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB}</Project>
        <Name>B</Name>
        <Private>True</Private>
      </ProjectReference>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <Reference Include="A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx, processorArchitecture=MSIL">
        <HintPath>A.dll</HintPath>
        <Private>True</Private>
      </Reference>
      <Reference Include="B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx, processorArchitecture=MSIL">
        <HintPath>B.dll</HintPath>
        <Private>True</Private>
      </Reference>
    </ItemGroup>
  </Otherwise>
</Choose>
于 2012-09-11T14:13:16.310 に答える
3

ソリューション ファイルでカスタム ビルド構成を定義すると、これを機能させることができます。

Visual Studio でソリューションを開き、ソリューションの構成マネージャーを開きます。[アクティブなソリューション プラットフォーム] ドロップダウンには<New...>、ソリューション用の x86 および x64 プラットフォームを作成できるオプションがあります。それらを作成したら、同じドロップダウンでそれぞれを選択し、リストでAny CPUプロジェクト A と B があり、プロジェクト C で対応する x86 または x64 が選択されていることを確認します。また、ビルドチェックボックスがチェックされていることを確認してください。

ここで、アクティブ ソリューション構成をリリースに切り替え、それらの追加のプラットフォームを同じ方法で定義します。

これを行うと、MSbuild コマンド ラインでソリューション ファイルのみを指定して、3 つのプロジェクトすべてをビルドできるようになります。

msbuild ABC.sln /target:Build /property:Configuration=Debug;Platform=x86 /verbosity:minimal
msbuild ABC.sln /target:Build /property:Configuration=Release;Platform=x86 /verbosity:minimal
msbuild ABC.sln /target:Build /property:Configuration=Debug;Platform=x64 /verbosity:minimal
msbuild ABC.sln /target:Build /property:Configuration=Release;Platform=x64 /verbosity:minimal
于 2012-09-10T20:35:41.697 に答える
0

コマンド ラインからdevenv.exeを使用してプロジェクトのビルドを試みることができます。これで問題が発生することはないと思いますが、このビルド オプションが廃止され、理由もなくハングすることがあったことを覚えています。他の2つも私には良くないという理由だけで、これを1つのオプションとして書きました。

于 2015-03-09T07:25:24.637 に答える