MSBuild を使用すると、かなり巧妙なトリックを実行できます。たとえば、これがあなたのプロジェクトだとしましょう。
Program.cs:
namespace MyCustomBuild
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello World");
}
}
}
次のように MSBuild ファイルを作成します。build.msbuild:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MajorVersion>1</MajorVersion>
<MinorVersion>0</MinorVersion>
</PropertyGroup>
<Target Name="Default">
<CombinePath BasePath="$(MSBuildProjectDirectory)"
Paths="Program.$(MajorVersion).$(MinorVersion)">
<Output TaskParameter="CombinedPaths" PropertyName="OutputDir"/>
</CombinePath>
<MakeDir Directories="$(OutputDir)"/>
<Csc Sources="program.cs"
OutputAssembly="$(OutputDir)\Program.$(MajorVersion).$(MinorVersion).exe"/>
</Target>
</Project>
を実行msbuild build.msbuild
した後の結果は次のとおりです。
私が投稿したものをさらに良くする方法:
- MSBuild 拡張パックAssemblyInfoを使用します。これにより、AssemblyInfo.cs ファイル内でバージョン情報が定義されている場合、バージョン情報を変更できます。または、アセンブリ バージョンを設定できるGenerateApplicationManifest Taskを調べることもできますが、現時点では、実行可能ファイルのファイル バージョンは常に 1.0.0.0 になります。
- このようなある種の自動インクリメント システムを実装します。
- コピー タスクを使用して、すべてのソース ファイルをバージョン管理されたディレクトリにコピーできます。
特に MSBuild に慣れていない場合は、理解することがたくさんありますが、Visual Studio では想像もつかないようなカスタマイズを可能にする強力なプログラムです。ソリューション ファイル (.sln) は、xml ではありませんが、MSBuild ファイルであることに注意してください。
うまくいけば、これはあなたが探しているものです。他の人が述べたように、公式のバージョン管理を使用することもお勧めしますが、MSBuild の強みである自動化したい特定のタスクがあるようです。