RoslynPad FileNotFoundException в расширении Visual Studio
Кому-нибудь удалось запустить редактор WPF RoslynPad в расширении Visual Studio (VSIX) (к сведению: я использую Visual Studio 2015 Enterprise)?
При попытке инициализировать хост Roslyn в VSIX следующим образом:
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= нейтральный, PublicKeyToken=b03f5f7f11d50a3a' или одну из ее зависимостей. Системе не удается найти указанный файл.":"System.Collections.Immutable, Version=1.2.0.0, Culture= нейтральный, 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)
Обратите внимание, что такой же фрагмент кода работает в WPF-приложении RosylnPadPelSample, предоставляемом RoslynPad.
Что меня поражает, так это то, что он ищет 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.Immutable
Версия 1.2.0.0 в качестве ссылки, затем я получаю то же исключение от RoslynPad, но на этот раз он не может найти System.Collections.Immutable
версия 1.2.0.1! Похоже, что перенаправление привязки не вступает в силу в расширениях Visual Studio. Кто-нибудь знает, как выполнить перенаправление привязки в расширениях Visual Studio или как решить эту проблему?
1 ответ
Я считаю, что вы не можете использовать файлы.config для перенаправления привязки сборки внутри VS, но вы можете добиться аналогичного эффекта, используя AppDomain.AssemblyResolve
событие.
Например, смотрите этот пост в блоге.