我有用C#編寫的Visual Studio 2013軟件包,我需要在Visual Studio 2013運行時在C++項目文件中對項目及其屬性進行一些更改和項目已加載。實際上,保存整個解決方案時保存項目文件也可以。在Visual Studio 2013中更改項目元數據C#
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="Test">
<MyItemToChange Include = "TestItem">
<MyMetadata1ToChange>Value1</MyMetadata1ToChange>
<MyMetadata2ToChange>Value2</MyMetadata2ToChange>
</MyItemToChange>
</ItemGroup>
<!-- The rest of the file -->
</Project>
在以前的Visual Studio版本中,我使用Microsoft.Build.Evaluation.Project類來更改項目的項目和元數據。當您有對項目的引用時,可以直接通過Project.Xml
屬性訪問項目的XML結構,也可以保留不同的Microsoft.Build.Evaluation.ProjectItem
並使用在那裏找到的接口。但是,由於Microsoft在其2013版本中更改了Visual Studio的結構,雖然Microsoft.Build.Evaluation.Project
未被棄用,但由於集合爲空,因此無法通過Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.LoadedProjects再訪問C++項目。但是,如果你想訪問C#項目,它仍然有效。 (作爲事實上,深瀏覽到對象在調試時,你可以發現,他們仍然使用相同Microsoft.Build.Evaluation
命名空間內表示。)
既然不能訪問任何Microsoft.Build.Evaluation.Project
更多,我需要一個替代到
- 訪問項目,否則不是使用
Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.LoadedProjects
- 寫項目項和元數據,而Visual Studio的2013正在運行。
除非我已經錯過了一些東西,下面都不好,我的目的:只
Microsoft.VisualStudio.Shell.Interop.IVsBuildPropertyStorage.SetItemAttribute
套屬性中顯示在Solution Explorer中的項目。解決方案資源管理器中未顯示「MyItemToChange」- 打開文件並手動編輯並保存。除非您知道如何禁止Visual Studio關於已更改項目的警告以及如何自動重新加載它,否則這不是一種方法。
注意:您可以關閉解決方案,手動打開項目文件,編輯並保存並重新打開解決方案。它會正常工作,數據在那裏,除非文件在源代碼控制之下。現在,它開闢了很多新的問題(爲什麼EnvDTE.DTE.SourceControl.CheckOutItem()不起作用等)。所以我仍然認爲如果Visual Studio處理將數據寫入項目文件,我會更好。 - 反思。是的,正如我之前提到的那樣,我可以挖掘內部課程以獲得「原始」
Microsoft.Build.Evaluation.Project
和Microsoft.Build.Evaluation.ProjectItem
的暫掛,但首先,它對於未來的使用是相當不安全的,據我所知,您無法確定如果你修改了這些現在的內部類,項目就會知道它很髒並且必須保存。
我很高興有任何建議,因爲我真的用盡了選項。
謝謝。