![](/img/trans.png)
[英]Changing the install directory for a C# program in Visual Studio 2013
[英]Changing Project Metadata in Visual Studio 2013 C#
我有一個用C#編寫的Visual Studio 2013包,我需要在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訪問C ++項目。 LoadedProjects作為集合是空的。 但是,如果要訪問C#項目,它仍然有效。 (事實上,在調試時深入瀏覽對象可以發現它們仍然使用相同的Microsoft.Build.Evaluation
命名空間進行內部表示。)
由於我無法再訪問Microsoft.Build.Evaluation.Project
,我需要替代
Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.LoadedProjects
之外,訪問項目 除非我錯過了什么,否則以下內容對我的目的不利:
Microsoft.VisualStudio.Shell.Interop.IVsBuildPropertyStorage.SetItemAttribute
僅將屬性設置為“解決方案資源管理器”中顯示的項目。 解決方案資源管理器中不顯示“MyItemToChange” Microsoft.Build.Evaluation.Project
和Microsoft.Build.Evaluation.ProjectItem
,但首先,它對未來非常不安全使用並且據我記得,你不能確定如果你現在修改這些內部類,項目將知道它是臟的並且必須保存。 我很高興有任何建議,因為我真的沒有選擇。
謝謝。
好吧,我已經找到了解決方法 ,而不是問題的真正解決方案。
我現在做的是以下內容:
EnvDTE.DTE.ItemOperations.PromptToSave
EnvDTE.DTE.SourceControl.CheckOutItem()
方法在源代碼管理中檢查項目文件。 如果它拋出異常(NotImplementedException),我使用bodge來檢查項目文件。 也就是說,我使用Microsoft.VisualStudio.Shell.Interop.IVsBuildPropertyStorage.SetProperty()
方法將自定義屬性寫入項目文件。 EnvDTE.DTE.Solution.Close()
System.Xml.XmlDocument
類打開項目文件。 編輯。 救。 哦,並刪除我在2.點(用於強制Visual Studio 2013檢查源代碼管理中的文件)中的愚蠢屬性。 EnvDTE.DTE.Solution.Open()
此時可能會再次要求用戶確認某些源控制選項。 為什么它只是一種解決方法而不是一個合適的解決方案
我仍在為這個問題尋找合適的解決方案。 但是,除非有人能告訴我它是如何完成的,否則我必須忍受當前的實施。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.