0

Clone()プロジェクトのコピーが必要ですが、または他の方法が見つかりません。これは私のコードです:

 private void Change(ArrayList SecuenciasIniciales, Project pj)
        {
            Project pjTemp = pj; //not make a copy else the same reference   

            for (int i = 0; i < SecuenciasIniciales.Count;i++ )
            {
                int[] secuencia = (int[])SecuenciasIniciales[i];
                ChangeProjectTemp(secuencia,ref pjTemp,pj);

                pjTemp.Application.LevelingOptions(false, true, true, PjLevelOrder.pjLevelPriority, true, Type.Missing, Type.Missing, PjLevelPeriodBasis.pjDayByDay, true, false, Type.Missing);
                pjTemp.Application.LevelNow(true);

                if (Directory.Exists(Server.MapPath("") + "\\sample.mpp"))
                {
                    System.IO.File.Delete(Server.MapPath("") + "\\sample.mpp");
                }

                pjTemp.Application.FileSaveAs(Server.MapPath("") + "\\sample.mpp", PjFileFormat.pjMPP, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                pjTemp.Application.FileSave();
                pjTemp.Application.DocClose();
                pjTemp.Application.Quit(PjSaveType.pjDoNotSave);

              }
}

pj私はその変化を望んでいません。解決策は何ですか?

4

2 に答える 2

0

プロジェクトのコピーを作成する方法には2つの可能なオプションがあり、どちらもさまざまなタスクを解決するために機能します。

タスク1: COM呼び出しが遅いため、プロジェクトのコピーを作成して、プロジェクトの分析を高速化する必要があります。

解決策: MS Project COMインターフェイスを介してプロジェクトについて知りたいことをすべて読み、データを独自のデータ構造に保存し、データ構造で必要なことをすべて実行します。タスクの代替ソリューションは、プロジェクトをXMLに保存し、XMLをデータ構造に逆シリアル化することです。

タスク2: MS Project APIを使用して、プロジェクトのコピーを作成し、新しいプロジェクトと同様に使用できるようにします。たとえば、最初のプロジェクトはテンプレートです。

解決策:Application.FileSaveAs新しく作成されたファイルを使用し、後で操作します。

API to MS Projectを使用してプロジェクトを操作することを理解することが重要ですが、MS Projectは.NETアプリケーションではなく、IClonableまたはのような.NET機能Object.MemberwiseCloneは使用できません。MS Projectに何をすべきかを伝えることしかできず、それはどういうわけかそれを行いますが、誰もその方法を知りません。

于 2013-02-16T03:32:48.637 に答える
0

私はあなたがこれを探していると信じています

C#のディープクローニングオブジェクト

ここにあるこのリンクも役立つかもしれません

ディープクローンとシャロークローン

このコードは私のコメントのリンクからのものです-あなたのためにプロジェクトに変更されました。

あなたのために働くかもしれない浅いコピーの例:

class Project : ICloneable
{
   //rest of your class
   int blah;
   string blah2;

   public Project()
   {

   }
   //rest of your class

   public object Clone()
   {
      return this.MemberwiseClone();      // call clone method
   }
}

そして、あなたが示したコードでこれを行います-

  Project pjTemp = (Project)pj.Clone(); 
于 2013-02-15T22:21:30.410 に答える