我的问题与 this one 非常相似,只是答案和解决方法对我不起作用。我也在 Visual Studio 2012 中。
我有一个引用另一个项目的 VSPackage,它依赖于其他 dll。每次我在调试中运行我的包时,我都会收到一个无法找到其他 dll 的异常。它们位于输出目录中,并且已签名。
我尝试通过 VSPackage 项目直接引用它们无济于事。
想法?
最佳答案
存在此问题的原因是,如果您的扩展程序没有显式依赖这些程序集,Visual Studio 不会在您的扩展程序的文件夹中查找程序集。例如,在配置文件 (IoC config) 或 xaml 代码中设置的依赖关系。我知道这个问题的三种解决方案:
[ProvideBindingPath]
public class MyVsPackage : Package
{ /* ... */ }
在我的 IntelliDebugger 项目中,我为它编写了一个类 ManualAssemblyResolver:
using System;
using System.Reflection;
namespace IntelliEgg.Debugger.Utility
{
public class ManualAssemblyResolver : IDisposable
{
public ManualAssemblyResolver(Assembly assembly)
{
if (assembly == null)
throw new ArgumentNullException("assembly");
_assemblies = new[] {assembly};
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
}
public ManualAssemblyResolver(params Assembly[] assemblies)
{
if (assemblies == null)
throw new ArgumentNullException("assemblies");
if (assemblies.Length == 0)
throw new ArgumentException("Assemblies should be not empty.", "assemblies");
_assemblies = assemblies;
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
}
public void Dispose()
{
AppDomain.CurrentDomain.AssemblyResolve -= OnAssemblyResolve;
}
private Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
foreach (Assembly assembly in _assemblies)
{
if (args.Name == assembly.FullName)
{
return assembly;
}
}
return null;
}
private readonly Assembly[] _assemblies;
}
}
必须在第一次调用问题程序集之前创建此类(例如,在 Package::Initialize() 方法中)
关于visual-studio-2012 - VSIX - 无法加载引用的 dll 的文件或程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674782/