我試圖以編程方式將一個導入任務添加到.csproj文件,但我不想使用Microsoft.Build.BuildEngine對象來執行此操作,因爲VS會彈出有關正在修改的項目文件的警告在Visual Studio之外。如何使用IVsBuildPropertyStorage添加MSBuild導入?
我見過幾頁[1] [2],提示IVsBuildPropertyStorage接口可以讓我訪問.csproj文件的MSBuild部分,但是我很難弄清楚如何做到這一點,或者如果它甚至可能是真的。它看起來像我需要指定我想要訪問的屬性的名稱,但我不知道如何弄清楚。對於「進口」屬性調用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
謝謝。我會很感激我可以得到的任何建議。
也許有更簡單的方法。你爲什麼要修改你的.csproj?有條件的硬編碼「 」能提供你所需要的嗎? –
Filburt
2010-07-02 06:05:41
我剛剛看到你以前的帖子解釋你在做什麼。 – Filburt 2010-07-02 06:12:51
任何解決方案與完整的源代碼? – Kiquenet 2012-08-24 10:54:05