在Visual Studio扩展中使用Microsoft.AspNetCore.Razor.Language遇加载错误求助
针对你遇到的版本绑定重定向导致的程序集加载失败问题,以下是几个可行的解决方向:
手动添加扩展级别的绑定重定向
在你的扩展项目中添加app.config文件,配置专属的程序集绑定规则,强制加载你已有的6.0.36.0版本,覆盖devenv.exe.config的全局重定向:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.AspNetCore.Razor.Language" publicKeyToken="adb9793829ddae60" culture="neutral" /> <!-- 将所有旧版本重定向到你实际拥有的6.0.36.0 --> <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="6.0.36.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>确保项目中
Microsoft.AspNetCore.Razor.Language的复制本地属性设为True,且生成时app.config会被转换为[你的扩展名称].dll.config并输出到扩展目录,这样扩展加载时会优先使用这个本地配置。将DLL嵌入扩展程序集
把Microsoft.AspNetCore.Razor.Language.dll设置为项目的嵌入的资源,然后在扩展初始化时手动提取并加载该DLL,绕过系统的版本检查:public override void Initialize(AsyncPackage package) { base.Initialize(package); // 加载嵌入的DLL var dllName = "Microsoft.AspNetCore.Razor.Language.dll"; var resourcePath = $"{typeof(YourExtensionClass).Namespace}.{dllName}"; using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourcePath); if (stream != null) { byte[] dllBytes = new byte[stream.Length]; stream.Read(dllBytes, 0, dllBytes.Length); Assembly.Load(dllBytes); } }注意替换
YourExtensionClass为你扩展的实际类名,确保资源路径正确。安装匹配版本的ASP.NET Core Runtime
尝试安装9.0.x版本的ASP.NET Core Runtime,让系统能找到9.0.0.0版本的程序集。不过此方法可能影响其他Visual Studio扩展的兼容性,建议在测试环境验证后再使用。升级扩展项目的目标框架
将扩展项目的目标框架升级到与9.0.0.0匹配的版本(如.NET 8或.NET 9),然后安装对应版本的Microsoft.AspNetCore.Razor.LanguageNuGet包,让版本与重定向目标一致,从根源解决版本不匹配问题。此方法需要评估扩展其他依赖的兼容性。
内容的提问来源于stack exchange,提问作者Phil Jollans

