Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio扩展:带有模式项模板的Json_Visual Studio_Vsix - Fatal编程技术网

Visual studio Visual Studio扩展:带有模式项模板的Json

Visual studio Visual Studio扩展:带有模式项模板的Json,visual-studio,vsix,Visual Studio,Vsix,我想创建一个VisualStudio扩展,允许用户创建一个json文件并自动对其应用自定义json模式。我遵循了,到目前为止,我成功地允许用户创建JSON文件,但我不知道如何自动将自定义模式绑定到它 我希望这个模式出现在扩展解决方案中,这样,当我更新扩展时,模式就会更新。在使用SideWaffle时,我注意到有一个“JSON模式选择器扩展”项模板,但它不起作用。它需要找不到的“Microsoft.Json.Core.Schema”(甚至在Microsoft.Json Nuget包中也找不到…)。

我想创建一个VisualStudio扩展,允许用户创建一个json文件并自动对其应用自定义json模式。我遵循了,到目前为止,我成功地允许用户创建JSON文件,但我不知道如何自动将自定义模式绑定到它


我希望这个模式出现在扩展解决方案中,这样,当我更新扩展时,模式就会更新。在使用SideWaffle时,我注意到有一个“JSON模式选择器扩展”项模板,但它不起作用。它需要找不到的“Microsoft.Json.Core.Schema”(甚至在Microsoft.Json Nuget包中也找不到…)。

这个问题的后面,但解决方案涉及到从VS2019开始引用非SDK VS程序集(以及之前的所有内容)。为了证明它不是SDK,它甚至在VS2019中更改了标识,从VS2019开始,它现在是
Microsoft.WebTools.Languages.Json
(而对于较旧的版本,它确实是
Microsoft.Json.Core
),当然,它将来可能会再次更改

知道了这一点,如果你在网上搜索开源回购协议,你会发现一些关于如何实现参考的想法。有些人在回购协议中捆绑了DLL的副本(这可能违反了某些许可条款)。就我个人而言,我没有走这条路,而是走了一条相对于$(MSBuildToolsPath)的过于复杂的路径:


$(MSBuildToolsPath)\..\..\..\Common7\IDE\Extensions\Microsoft\Web Tools\Languages\Microsoft.WebTools.Languages.Json.dll
假的
假的
只要看看这一点,很明显,这种方法是脆弱的,路径可能会在未来移动,但它避免了引导dll

无论如何,无论您选择以何种方式引用程序集,对于来自VS本身的所有其他内容,请确保它是Private=false,因为您不希望最终的VSIX捆绑包包含它

那么实现IJsonSchemaSelector就很简单了:

[导出(typeof(IJsonSchemaSelector))]
公共类LaunchConfigJsonSchemaProvider:IJsonSchemaSelector
{
私有静态只读字符串模式=@“”;
可用的公共事件事件处理程序已更改{add{}remove{}
公共任务GetAvailableSchemasAsync()
{
返回Task.FromResult((IEnumerable)new[]{Schema});
}
公共字符串GetSchemaFor(字符串文件位置)
{
字符串ext=Path.GetExtension(fileLocation);
if(!“.greatjson”.Equals(ext,StringComparison.OrdinalIgnoreCase))
返回null;
返回模式;
}
}