プログラムで .csproj ファイルにインポート タスクを追加しようとしていますが、これを行うために Microsoft.Build.BuildEngine オブジェクトを使用したくありません。これは、VS がプロジェクト ファイルが外部から変更されているという警告を表示するためです。ビジュアルスタジオ。
IVsBuildPropertyStorage インターフェイスを使用すると .csproj ファイルの MSBuild 部分にアクセスできると示唆しているページ [1] [2] をいくつか見ましたが、これを行う方法を理解するのに苦労しています。 . アクセスしたいプロパティの名前を指定する必要があるようですが、それを理解する方法がわかりません。「インポート」プロパティに対して GetPropertyValue() を呼び出しても、最終結果の外観が既に設定されているプロジェクト ファイルに対しては何も返されません。
EnvDTE.Project proj = ...;
var sol = Package.GetGlobalService(typeof(VsSolution)) as IVsSolution;
IVsHierarchy hier;
sol.GetProjectOfUniqueName(p.UniqueName, out hier);
var storage = hier as IVsBuildPropertyStorage;
string val;
storage.GetPropertyValue("Import", String.Empty,
(uint)_PersistStorageType.PST_PROJECT_FILE, out val);
// val is null
[1] https://mpfproj.svn.codeplex.com/svn/9.0/Tests/UnitTests/ProjectTest.cs
[2] http://social.msdn.microsoft.com/Forums/en-US/vsx/thread /e1983591-120a-4a2f-a910-e596dd625e68
ありがとう。これで得られる提案をいただければ幸いです。