2016-11-02 8 views
5

概要は、どのように私はMSBuildのでMicrosoft.Build.Evaluation.Projectをリロードすることができます14.0

私は、プロジェクトのインスタンスに.csprojをロードし、ディスク上の.csprojを変更し、再ロードしようとすると、 .csproj(アプリケーションを停止することなく)、私の変更は、どこかにキャッシュされているかのように、新しく読み込まれたProjectインスタンスに表示されません。

詳細な手順

私はMSBuildの14.0にMicrosoft.Build.Evaluation.Projectクラスを使用しています。

次のように私はプロジェクトをロード:

MyProject = new Project(fileName);

fileNameは私のローカルマシン上.csprojファイルです。

プロジェクトがメモリにロードされた後、私が示している、それはウォッチウィンドウでAllEvaluatedItemsを評価することによって、Class2.csと呼ばれる特定のファイルが含まれていることを確認します。

"Compile"="Class2.cs" ["Class2.cs"] #DirectMetadata=0 Microsoft.Build.Evaluation.ProjectItem

私はその後開きます。 csprojファイルをテキストエディタで、およびクラス2のエントリを見つける:アプリORIれながら

<Compile Include="Class2.cs" />

次に、私は(私の.csprojファイルからこのエントリを削除しますProjectインスタンスが実行中であることをginallyにロードして)、.csprojファイルを保存します。

次のように私は、プロジェクトをアンロードし、再ロード:

MyProject.ProjectCollection.UnloadProject(MyProject); // call the same code to reload the project from the same .csproj location: MyProject = new Project(fileName);

をプロジェクトがあるかのように最後に、私は、私はクラス2が再び現れる参照、ウォッチウィンドウに新しく作成されたインスタンスのAllEvaluatedItemsを拡大ディスクから再ロードされません。

何かキャッシュがありますか?ディスクからプロジェクトをアンロードして再ロードするには何か他の操作を行う必要がありますか?

答えて

1

アンロードの呼び出しにもかかわらず、プロジェクトの一部であるProjectCollectionが何らかの種類のキャッシュを実行しているようです。毎回キャッシュを削除すると思われる新しいProjectCollectionを指定

MyProject = new Project(fileName, null, null, new ProjectCollection());

、プロジェクトが正常にディスクからロードされる次のように私は私のプロジェクトの負荷を変更しました。

0

変更をプロジェクトにロードする別の方法は、MyProject.ReevaluateIfNecessary()を呼び出すことです。これにより、アンロード/レクリエーションのサイクルが節約されます。

関連する問題