Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
C# Visual Studio扩展在调试时可以工作,但在安装VSIX时无法工作_C#_Visual Studio 2019_Visual Studio Extensions_Vsix - Fatal编程技术网

C# Visual Studio扩展在调试时可以工作,但在安装VSIX时无法工作

C# Visual Studio扩展在调试时可以工作,但在安装VSIX时无法工作,c#,visual-studio-2019,visual-studio-extensions,vsix,C#,Visual Studio 2019,Visual Studio Extensions,Vsix,我正在尝试用C#制作一个VSIX插件。当我处于开发模式时,插件可以正常工作。但是当我试图通过双击VSIX来安装插件时,它不起作用。 我读了一些文件,有些人说要把它打包,然后安装。但是,当我将“Generate.pkgdef file”选项设置为“True”时,我会收到一个类似于“CreatePkgDef:error:ArgumentException:在此程序集中找不到Visual Studio注册属性”的错误程序集应包含在程序集“Microsoft.VisualStudio.Shell.Fra

我正在尝试用C#制作一个VSIX插件。当我处于开发模式时,插件可以正常工作。但是当我试图通过双击VSIX来安装插件时,它不起作用。 我读了一些文件,有些人说要把它打包,然后安装。但是,当我将“Generate.pkgdef file”选项设置为“True”时,我会收到一个类似于“CreatePkgDef:error:ArgumentException:在此程序集中找不到Visual Studio注册属性”的错误程序集应包含在程序集“Microsoft.VisualStudio.Shell.Framework”版本“16.0.0.0”中定义的属性“Microsoft.VisualStudio.Shell.RegistrationAttribute”的实例

基本上我想部署我的VSIX。我该怎么做?有人能帮忙吗?
谢谢。

我知道真正的问题。实际上,我正在使用ITeamExplorerNavigationItem2在团队资源管理器中添加一个按钮。 我正在使用属性public System.Drawing.Image控制按钮图标

public System.Drawing.Image Image => null // Button comes up  without any button icon

public System.Drawing.Image Image => System.Drawing.Image.FromFile("MyImage.png"); // button does not show up in the team explorer
我怀疑的是,在调试期间,它正在查找“MyImage.png”的路径,但在运行时,该图像没有打包到VSIX,因此它没有找到.png路径,随后它也没有显示图标和按钮

为了解决这个问题,我实际上在项目中添加了一个Resource.resx文件,并在其中添加了图像。由于resource.resx文件是在编译时添加到VSIX文件中的,因此安装后会正确显示该文件。 修改后的代码

public System.Drawing.Image Image => Resource.MyImage;

VSIX安装的资产在.vsixmanifest文件中声明。在您的情况下,您已经:

  <Assets>
    <Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%|" />
    <Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
  </Assets>

您可以使用诸如processmonitor()之类的工具来查看进程未能加载的路径。(我不知道为什么它在调试时工作,但在安装时不工作。)

这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-请尝试参考。您正在构建/运行哪种类型的扩展?VSIX通常部署VSSDK包(带有.pkgdef)、基于MEF的编辑器扩展或项目或项模板。如果你想要一个好的答案,你需要提供更多关于你到底在做什么的细节,也许还需要一份.vsixmanifest的副本。听上去,您并没有创建VSSDK包,因为您没有允许构建生成.pkgdef文件的属性。Hi@EdDore,我使用的是基于MEF的编辑器扩展名。请把舱单放在下面。请找到git中心谢谢您的回复。我添加的第二项用于检查它是否有效。即使没有这一点,它也不起作用。我的观点是,在发布和调试模式下调试时,它是如何工作的,但在安装时,它不工作。据我所知,我使用的是public System.Drawing.Image=>System.Drawing.Image.FromFile(“MyImage.png”);安装后不起作用(可能是资源文件未添加到VSIX)。如果我将其公开为System.Drawing.Image Image=>null,则它在没有任何按钮图像的情况下工作。@rsgeeks184我扩展了我的答案以答复此新信息。
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string iconPath = Path.Combine(assemblyFolder, "MyImage.png");