0

ライブラリの使用方法のサンプルと単体テストを含むライブラリがあります。

展開するカスタム VS2012 ソリューションを作成しようとしています。

展開を開始するときに与えられた入力に応じて、入力ファイルで指定されたプロジェクトを含むソリューション (Samples.sln など) を作成できるようにしたいと考えています。

例:

//inputfile1.txt
ProjectA    
ProjectB

MSBuild xml ファイルまたは F# スクリプト (またはこれを実行できるもの) を実行すると、ProjectA、ProjectA.Tests、ProjectB、ProjectB.Tests を含む Samples.sln を含む Samples ディレクトリが取得されます。

ProjectX & Project7 などで入力ファイルを指定すると、同様のことが起こります。

MSBuild を使用して、ファイル入力を読み取り、プロジェクト フォルダーを新しいフォルダーにコピーし、このプロセス全体に必要なその他のことを行う方法を理解しましたが、ソリューションを作成してカスタマイズする方法がわかりません。これが MSBuild でも可能かどうかはわかりません。既存のソリューションを変更することしかできないと思います (ただし、これを行うのにも問題がありました)。

これらのオプションがあると思います:

A. Add all projects to a Samples solution, then use msbuild to turn them on or off
or
B. There exists some other way (not using msbuild) to do this whole process

msbuild は A にも対応していますか?

4

1 に答える 1

1

MsBuild は主にビルド​​ プラットフォームであることを理解する必要があります。たまたまファイルなどを読み書きできることもありますが、それはコアビジネスではありません。そのため、ソリューション ファイルを生成することはできますが、MsBuildだけを使用するのは非常に困難です。単純に、そのようなことを直接実行できるようにするためのものではないからです。

ここにオプション C があります。テキスト エディターで sln を開くと、構造が非常に単純であることがわかります。すべてのプロジェクトにProject ... EndProject. MsBuild ターゲットでこれらの文字列を適切な形式 (つまり、guid を生成し、ソリューションへの相対パスを見つけ出し、パスからプロジェクト名を取得するなど) で生成し、それらすべてを ItemGroup に配置してから、 WriteLinesToFile を使用してソリューション ファイルを作成します。完全に可能ですが、多くの作業が必要であり、お勧めしません。

オプションAの場合、それはさらに困難です。プロジェクトをビルドに含める/除外するために、VisualStudioは.suoファイルを使用し、それらは生成方法がわからないバイナリ独自の形式です。

これにより、オプション B が残ります。これは基本的にオプション C ですが、車輪を再発明する必要はありません。選択したプロジェクトのソリューション ファイルを生成できるツールを見つけ、MsBuild で を使用して呼び出すことができExecます。これを実行できるツールはおそらくたくさんありますが、インターネットで見つけた最初の使用可能なツールSolutionMakerを使用した例を次に示します。プロジェクトがディレクトリ Foo にあると仮定すると、次のように使用します。

<Exec Command="SolutionMaker /s Foo/foo.sln /p Foo /v 2012"/>

対応するコマンド ライン オプションは

/s <solution>: Solution file path
/p <path>: project root path
/v <fileVersion>: New solution file will be generated in the specified format.
   valid versions: 2008, 2010, 2012.
于 2013-10-16T08:16:05.540 に答える