[英]Visual Studio Extension Package - Custom File Type - Editor and Icon
[英]Visual Studio Custom Editor for Specific File
我正在為Visual Studio 2017創建自定義項目模板,效果很好。 在此項目模板內,我發出一個名為“ manifest.json ”的文件。
我需要為“ manifest.json ”文件創建自定義編輯器\\設計器,當用戶在“ 解決方案資源管理器 ”中雙擊該文件時,它將打開我的自定義編輯器。
我已經在Microsoft Doc上找到了幾篇文章(例如“ 創建自定義編輯器和設計器” ),並找到了一些有關創建自定義編輯器和自定義設計器的GitHub示例(例如此Editor_With_Toolbox , SingleFileGenerator , WPFDesigner_XML和Snippet Designer )。
我想實現只在我的自定義項目模板中的特定文件上運行的Visual Studio自定義編輯器\\設計器。 如何實現呢?
最終,在開源示例支持了許多嘗試和錯誤方法之后,我可以通過以下步驟解決問題:
IVsEditorFactory
的類)內部,可以在CreateEditorInstance
函數內部,使像這樣的條件將編輯器限制為具有特定名稱的JSON文件: if (System.IO.Path.GetFileName(pszMkDocument).ToLower() != "manifest.json")
{
return VSConstants.VS_E_UNSUPPORTEDFORMAT;
}
ProjectTemplate.csproj
)中用元數據標記目標文件(要了解有關元數據的更多信息,請查找msbuild元數據),如下所示: <Content Include="manifest.json" >
<IsWebExtensionManifest>true</IsWebExtensionManifest>
</Content>
要檢查編輯器工廠內部的元數據,我們將在CreateEditorInstance
函數中繼續進行以下工作:
4.1我們已經將以下兩個參數傳遞給CreateEditorInstance
函數:( IVsHierarchy pvHier
和uint itemid
)。
4.2使用這兩個參數獲取父項目的IVsBuildPropertyStorage
(一些代碼示例在線存在)。
4.3使用此代碼檢查我們的標記元數據:
buildPropertyStorage.GetItemAttribute(itemid, "IsWebExtensionManifest", out string propVal);
if (!Convert.ToBoolean(propVal))
{
return VSConstants.VS_E_UNSUPPORTEDFORMAT;
}
使用此自定義編輯器完成自定義項目后,我將發布其GitHub鏈接以更加清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.