3

クラス ライブラリ プロジェクトの通常の .csproj ファイルを使用して、すべてのコード ファイル (つまり、プロジェクト ツリー内のすべての .cs ファイル、含まれるサブフォルダー) を個別にリストせずに含めるように MS Build に指示する方法はありますか?

私が見つけることができる最も近い解決策はUsing Wildcards to Specify Itemsです。

これは、Visual Studio がクラス ライブラリ プロジェクトでファイルごとに命令をビルドする方法の例です。

  <ItemGroup>
    <Compile Include="Controllers\HomeController.cs" />
    <Compile Include="Controllers\ParticipantController.cs" />
    <Compile Include="Global.asax.cs">
      <DependentUpon>Global.asax</DependentUpon>
    </Compile>
    <Compile Include="Models\ParticipantModel.cs" />
    <Compile Include="Models\UserModel.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Utility.cs" />
  </ItemGroup>

別の種類のプロジェクトである Web サイト プロジェクトは、ファイルの変更を検出してそれらのファイルを再コンパイルするメカニズムを使用します。関連するすべてのものをコンパイルするという概念は、私がクラス ライブラリ プロジェクトで目指しているものですが、変更を検出する必要はありません。

関連する Visual Studio の「問題」:
私の理想的なソリューションは、ビルド ファイルを一度に 1 ファイルずつビルドする Visual Studio によって守られていない可能性が高いことを認識しているため、ビルド ファイルを手動で編集することになります。私の理想的なソリューションで Visual Studio をうまく機能させる方法はありますか?

4

1 に答える 1

3

すべてのファイルを含む外部 MSBuild ファイルを含めてみてください。

ファイル: IncludeEverything.proj

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="BeforeBuild">
      <ItemGroup>
        <Compile Remove="@(Compile)" />
        <Compile Include="*.cs;.\**\*.cs" />
      </ItemGroup>
    </Target>
  </Project>

csproj を変更して、他のものをインポートします。

  ...
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="IncludeEverything.proj" />
  ...

このソリューションを使用すると、VS が csproj にファイルをインクルードするかどうかは関係ありません... 最後に、すべてがインクルードされます。

これにより、このソリューションを他のプロジェクトで簡単に再利用できます。

于 2011-08-02T23:00:41.840 に答える