Visual studio 从带有自定义对话框的Visual Studio扩展中加载引用的程序集时,似乎不尊重绑定路径

Visual studio 从带有自定义对话框的Visual Studio扩展中加载引用的程序集时,似乎不尊重绑定路径,visual-studio,visual-studio-extensions,vsix,Visual Studio,Visual Studio Extensions,Vsix,我创建了一个使用引用程序集的Visual Studio 2013扩展。这些程序集由vsix安装到程序包文件夹的子文件夹中。 我还向.pkgdef文件添加了带有ProvideBindingPath属性的子文件夹。注册表(HKCU\Software\Microsoft\VisualStudio\12.0\u config\BindingPaths\{PACKAGEGUID})在安装vsix时更新为正确的路径 因此,MyExtension.pkgdef如下所示: ... [$RootKey$\Inst

我创建了一个使用引用程序集的Visual Studio 2013扩展。这些程序集由vsix安装到程序包文件夹的子文件夹中。 我还向
.pkgdef
文件添加了带有
ProvideBindingPath
属性的子文件夹。注册表(
HKCU\Software\Microsoft\VisualStudio\12.0\u config\BindingPaths\{PACKAGEGUID}
)在安装vsix时更新为正确的路径

因此,
MyExtension.pkgdef
如下所示:

...
[$RootKey$\InstalledProducts\MyPackage]
@="#110"
"Package"="{f9c9068e-d551-49b1-b3c5-ffaff2ad6398}"
"PID"="3.0.0.5"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\BindingPaths\{F9C9068E-D551-49B1-B3C5-FFAFF2AD6398}]
"$PackageFolder$\\LibsV3"=""
[$RootKey$\BindingPaths\{F9C9068E-D551-49B1-B3C5-FFAFF2AD6398}]
"$PackageFolder$"=""
...
...
[$RootKey$\InstalledProducts\MyPackage]
@="#110"
"Package"="{f9c9068e-d551-49b1-b3c5-ffaff2ad6398}"
"PID"="3.0.0.5"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\BindingPaths\{16766769-9969-4A46-A76B-76698F6374F2}]
"$PackageFolder$\\LibsV3"=""
[$RootKey$\BindingPaths\{F9C9068E-D551-49B1-B3C5-FFAFF2AD6398}]
"$PackageFolder$"=""
...
这就是
extension.vsixmanifest
的外观

<PackageManifest>
 <Metadata>
    <Identity Id="F9C9068E-D551-49B1-B3C5-FFAFF2AD6398" Version="3.0.0.5" Language="en-US" Publisher="kmavize" />
     ...
  <Assets>
    <Asset Type="Microsoft.VisualStudio.VsPackage" Path="MyExtension.pkgdef" />
    <Asset Type="Microsoft.VisualStudio.Assembly" Path="MyEditor3.dll" AssemblyName="MyEditor3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=5555555555555555" />
    <Asset Type="Microsoft.VisualStudio.Assembly" Path="LibsV3\MyRefAssembly.dll" AssemblyName="MyRefAssembly, Version=3.0.0.0, Culture=neutral, PublicKeyToken=5555555555555555" />
    ...
  </Assets>
</PackageManifest>

...
...
当我的自定义编辑器加载时,我得到一个异常,即无法找到引用的程序集(LibsV3文件夹中的程序集)

我确实将这些引用的程序集放在了LibsV3子文件夹中,这样我的T4模板(也是我的扩展的一部分)就能够区分当前版本(V3)程序集和在不同扩展中使用相同名称的旧版本程序集(同时安装我的扩展)


也许有另一种方法可以解决T4模板的初始问题,这样我就不会在程序集未找到异常中运行…

正如Jason建议的那样,我只是在一个新注册表项下添加了第二条路径,它可以工作

所以我的
pkgdef
现在看起来是这样的:

...
[$RootKey$\InstalledProducts\MyPackage]
@="#110"
"Package"="{f9c9068e-d551-49b1-b3c5-ffaff2ad6398}"
"PID"="3.0.0.5"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\BindingPaths\{F9C9068E-D551-49B1-B3C5-FFAFF2AD6398}]
"$PackageFolder$\\LibsV3"=""
[$RootKey$\BindingPaths\{F9C9068E-D551-49B1-B3C5-FFAFF2AD6398}]
"$PackageFolder$"=""
...
...
[$RootKey$\InstalledProducts\MyPackage]
@="#110"
"Package"="{f9c9068e-d551-49b1-b3c5-ffaff2ad6398}"
"PID"="3.0.0.5"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\BindingPaths\{16766769-9969-4A46-A76B-76698F6374F2}]
"$PackageFolder$\\LibsV3"=""
[$RootKey$\BindingPaths\{F9C9068E-D551-49B1-B3C5-FFAFF2AD6398}]
"$PackageFolder$"=""
...

将完整的.pkgdef内容共享到pastebin/gist/something可能会有所帮助。我编辑了问题并添加了一些“代码”和进一步的解释。尝试一下,尽管我认为这无关紧要——您不需要额外的绑定重定向来具有与包相同的GUID。那里的GUID是任意的,以防止冲突。有可能是因为你的pkgdef在同一个GUID下有两个重定向,所以有些东西变得混乱了。。。我不知道实际的GUID是任意的。
BindingPaths
下还有几个其他注册表项,它们有多个条目。不管怎样,它现在起作用了。。。非常感谢。