1

有没有人成功地在 Visual Studio Extension (VSIX) 中运行 WPF RoslynPad 编辑器(仅供参考:我使用的是 Visual Studio 2015 Enterprise)?

当尝试像这样在 VSIX 中初始化 Roslyn 主机时:

var host = new RoslynHost(additionalAssemblies: new[]
{
    Assembly.Load("RoslynPad.Roslyn.Windows"),
    Assembly.Load("RoslynPad.Editor.Windows")
});

我收到以下错误:

无法加载文件或程序集 'System.Collections.Immutable, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。系统找不到指定的文件。":"System.Collections.Immutable, Version=1.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

堆栈跟踪是:

 at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.RuntimeAssembly.get_DefinedTypes()
   at RoslynPad.Roslyn.RoslynHost.<>c.<.ctor>b__20_0(Assembly x)
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Composition.TypedParts.TypedPartExportDescriptorProvider..ctor(IEnumerable`1 types, AttributedModelProvider attributeContext)
   at System.Composition.Hosting.ContainerConfiguration.CreateContainer()
   at RoslynPad.Roslyn.RoslynHost..ctor(NuGetConfiguration nuGetConfiguration, IEnumerable`1 additionalAssemblies, RoslynHostReferences references)

请注意,相同的代码在 RoslynPad 提供的“RosylnPadPelSample”WPF 应用程序中工作。

令我印象深刻的是它正在寻找 System.Collections.Immutable 版本 1.2.0.0(我相信这是 System.Reflection.Metadata.dll 中的依赖项),因为示例应用程序不包含此文件。它有 1.2.0.1 版本(与我的扩展相同的版本),但有一个绑定重定向来弥补它的遗漏:

<dependentAssembly>
        <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.1.0" newVersion="1.2.1.0" />
</dependentAssembly>

如果我明确添加System.Collections.Immutable1.2.0.0 版本作为参考,那么我会从 RoslynPad 得到相同的异常,但这次它找不到System.Collections.Immutable1.2.0.1 版本!绑定重定向似乎在 Visual Studio Extensions 中没有生效。有谁知道如何在 Visual Studio Extensions 中完成绑定重定向或如何解决这个问题?

4

1 回答 1

0

我相信您不能在 VS 中使用 .config 文件进行程序集绑定重定向,但您可以使用AppDomain.AssemblyResolve事件实现类似的效果。

例如,请参阅此博客文章

于 2018-07-19T11:26:39.753 回答