1

Google から回答を得るための適切なキーワードを見つけられないだけかもしれませんが、ここでは説明します。

「プロジェクト」という名前で取り組んでいるプロジェクトがあるとします。最初のバージョンでは、「Project_Version1」フォルダーに保存し、ソリューション、プロジェクト、ビルドexeなどの名前を「Project_Version1」としています。

ここで、プロジェクトの次のバージョンを作成し、「Project_Version2」と呼びたいと思います。現在これを行うには、元のフォルダーをコピーして名前を「Project_Version2」に変更し、他のすべての内部のものもそれに名前を変更したいと考えています。現在、Windows エクスプローラーの名前の変更と、ソリューションのさまざまなプロパティ ページのいくつかを組み合わせて、これを行う必要があります。

これを行うためのより良い方法が必要です。プロジェクトの 2 番目のバージョンを作成し、そのファイルを最初のバージョンとは別に保存するにはどうすればよいでしょうか? バージョン番号を含む適切なファイルの名前も変更する方法はありますか?

4

3 に答える 3

4

実際、これを行うためのより良い方法があります。これはバージョン管理と呼ばれます。ソースをTFS(またはgitまたはその他のSCMソフトウェア
) にチェックインすると、すべてのバージョンが時間の経過とともに追跡されます。

その後、複数のバージョンを同時に維持する必要がある場合(たとえば、顧客が最先端にゆっくりと移行し、サポートされている古いバージョンの重大な問題を修正するためにパッチが必要な顧客ベースの場合)、これらのバージョンをブランチとして保持し、変更を選択的にマージできます。

ソース管理がバージョン管理に適していると判断した場合(他にも多くの利点があります)、このgitチュートリアルなどの投稿を読んだり、バージョン管理を使用する理由を検討してください。


何らかの理由でソース管理を本当に使用できない場合は、簡単に変更できる言語構造を使用して、できるだけ多くのことを参照することをお勧めします(たとえば、C#と妥当なIDE、クイックリファクタリング、または他の言語でバージョン固有のデータの厳密な重複排除)。
理想的には、プロジェクトファイルのバージョン定義(すばやく変更するためのビルド変数として設定できます)とともに、コードのバージョンの定義を1つだけにする必要があります。

この場合、プロジェクトをコピーし、プロジェクトのコードバージョンとバージョン変数を変更し、相対パスなどを適切に使用することを前提としています(ハードコードされたバージョンはありません!)。いくつかの変数の名前をすばやく変更すると、うまくいくはずです。

理想的には、ファイル名の大部分はバージョンを参照しません。バージョンを参照する唯一のものは、おそらく、含まれているディレクトリ、プロジェクト/ソリューションファイル、およびコード内のいくつかの分離された参照である必要があります。

于 2012-06-13T01:56:44.333 に答える
2

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した後の結果は次のとおりです。 ここに画像の説明を入力

私が投稿したものをさらに良くする方法:

  1. MSBuild 拡張パックAssemblyInfoを使用します。これにより、AssemblyInfo.cs ファイル内でバージョン情報が定義されている場合、バージョン情報を変更できます。または、アセンブリ バージョンを設定できるGenerateApplicationManifest Taskを調べることもできますが、現時点では、実行可能ファイルのファイル バージョンは常に 1.0.0.0 になります。
  2. このようなある種の自動インクリメント システムを実装します。
  3. コピー タスクを使用して、すべてのソース ファイルをバージョン管理されたディレクトリにコピーできます。

特に MSBuild に慣れていない場合は、理解することがたくさんありますが、Visual Studio では想像もつかないようなカスタマイズを可能にする強力なプログラムです。ソリューション ファイル (.sln) は、xml ではありませんが、MSBuild ファイルであることに注意してください。

うまくいけば、これはあなたが探しているものです。他の人が述べたように、公式のバージョン管理を使用することもお勧めしますが、MSBuild の強みである自動化したい特定のタスクがあるようです。

于 2012-06-13T13:45:55.703 に答える
0

理想的には、Visual Studio 自体は単なる IDE であるため、プロジェクトのバージョン管理はソース管理システム内で行う必要があります。

ソース管理システムを使用していない状況では、残念ながら、現在行っていることよりも優れた解決策を認識していません。

于 2012-06-13T02:02:56.653 に答える