4

学習している単純な MSBuild ファイルがあります。

ここにあります:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Clean" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Label="Globals">
    <ProjectGuid>{D5A16164-962E-4A6D-9382-240F31AB6C50}</ProjectGuid>
  </PropertyGroup>
  <Target Name="Clean">
    <ItemGroup>
      <BinFiles Include="bin\*.*" />
      <fff Include="f\*.*" />
    </ItemGroup>
    <Delete Files="@(BinFiles)" />
    <Delete Files="@(fff)" />
  </Target>
</Project>

これを Visual Studio ソリューションに含めて、Visual Studio 2012 から「クリーン」ターゲットを実行できるようにしたいと考えてtestproject.msbuildprojいます。clean コマンドを実行すると、「予期しないエラー」が発生します。

プロジェクトの名前をtestproject.csproj. ただし、ディレクトリを作成objして入力するため、これは望ましくありません。bin/x86/debugまた、参照ドロップダウンがまだ提供されているため、Visual Studio でも間抜けに見えます。

ランダムなエラーや誤った仮定なしで、Visual Studio から単純なバニラ MSBuild プロジェクトを使用するにはどうすればよいですか?

Visual Studioからのみこれに問題があることに注意してください。コマンドラインからmsbuildを使用すると、完全に機能します

4

1 に答える 1

2

csproj ファイルを開くと、Visual Studio は bin / obj フォルダーを作成します。Build / Rebuild / Clean をクリックすると、プロジェクト ファイルから適切なターゲットが使用されます。

VS がこれらのフォルダーを作成するのを止めることはできませんが、適切なプロパティを設定することで一時フォルダーに作成するように要求できます。詳細については、この MSDN の記事を参照してください。

したがって、手順はプロジェクトの名前を に変更しcsproj、次の行をプロジェクトに追加することです。

<PropertyGroup>
  <OutputPath>$(Temp)\bin</OutputPath>
  <IntermediateOutputPath>$(Temp)\obj</IntermediateOutputPath>
</PropertyGroup>

私は通常、VS から MSBUILD ファイルを操作するために少し異なるアプローチを使用します。

  • ビルド プロジェクトの純粋なコンテナーとして、一部を削除した通常のcsprojファイルを使用します。Import ... CSharp.targets
  • 「プロジェクトに含める」を使用して、ターゲットとロジック、およびすべてのプロパティ、XSLT などの必要なアーティファクトを含む実際のビルド ファイルを追加します。これにより、階層を管理し、VS.Net 内から任意のファイルを変更できます。
  • Build私は必要なもののためにファイル内の/Rebuildターゲットを再定義しcsprojます。

このような:

<Target Name="Build">
  <Exec Command="%windir%\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe Builds\build.proj /t:Build /v:m" />
</Target>
<Target Name="Rebuild">
  <Exec Command="%windir%\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe Builds\build.proj /t:Build /v:d" />
</Target>
于 2013-04-26T12:18:56.447 に答える