SQL Server Management Studio 18无法打开(仅弹出初始屏幕)


105

我只是在仅安装了VS2019的计算机上安装了SSMS 18 GA,当我尝试打开SSMS时,将显示启动屏幕,但随后该过程退出。

使用-log参数运行ssms会显示一条错误消息:

程序包[任务计划程序程序包]的CreateInstance失败源:'mscorlib'描述:无法加载文件或程序集'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 15.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'或以下之一它的依赖关系。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)System.IO.FileLoadException:无法加载文件或程序集“ Microsoft.VisualStudio.Shell.Interop.8.0,版本= 15.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 15.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'---> System.IO.FileLoadException:无法加载文件或程序集'Microsoft.VisualStudio.Shell.Interop.8.0,Version = 8.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 8.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'

WRN:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。注意:程序集绑定失败日志记录会降低性能。要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

在System.Reflection.RuntimeAssembly.GetType(字符串名称,布尔throwOnError,布尔ignoreCase)在System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly程序集,字符串名称,布尔throwOnError,布尔ignoCase,ObjectHandleOnStack类型)在System.Activator.CreateInstance(String assemblyString,字符串typeName,布尔值ignoreCase,BindingFlags bindingAttr,活页夹装订器,Object [] args,CultureInfo文化,Object [] ActivationAttributes,证据securityInfo,StackCrawlMark&stackMark),位于System.Activator.CreateInstance(字符串assemblyName,String typeName),位于System.AppDomain .CreateInstance(字符串assemblyName,字符串typeName)

System.IO.FileLoadException:无法加载文件或程序集“ Microsoft.VisualStudio.Shell.Interop.8.0,Version = 8.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 8.0.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'

WRN:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。注意:程序集绑定失败日志记录会降低性能。要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

我尝试在SSMS上运行“修复”,并尝试修复C:\ProgramData\Package Cache\{AAA9F15B-AF45-4562-9991-93A848D3A902}v15.0.28307.421\redist\vs2017_isoshell_for_ssms.msi,但问题仍然存在。


1
通过添加-log参数来生成日志文件。例如:"C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe" -log C:\drop\log.txt
米奇

1
您也可以从C:\ Users(用户)\ AppData \ Roaming \ Microsoft \ AppEnv \ 15.0 \ ActivityLog.xml中获取日志,而无需使用-log开关
Stephane,

Answers:


125

我只是在Microsoft.VisualStudio.Shell.Interop.8.0.dll中覆盖了C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PublicAssemblies副本,..\PrivateAssemblies\Interop然后打开了IDE。(感谢Mitch发现有问题的DLL名称。)

这看起来像今天流行的问答,所以很高兴知道这不仅是我。


对我来说,还有一个Microsoft.VisualStudio.Shell.Interop.8.0要复制到的文件夹。
Andez

像魅力和救生员一样工作。谢谢。
哈特利San

为我工作。 \ PrivateAssemblies 复制到\ PublicAssemblies。
Hairgami_Master

65

随着Ronan Ariely的推荐已经发布了官方解决方案,建议从删除一行ssms.exe.config

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <!-- ...snip... -->
    <runtime>
        <!-- ...snip... -->
        <!-- Remove this line (~line 38) -->
        <NgenBind_OptimizeNonGac enabled="1" />
        <!-- ...snip... -->
    </runtime>
    <!-- ...snip... -->
</configuration>

如果运行了先前的将程序集添加到GAC的解决方案,则可能应通过运行以下命令将其卸载:

gacutil /u Microsoft.VisualStudio.Shell.Interop.8.0,Version=15.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a

1
的任何版本gacutil都可以。或者powershell如果没有安装SDK版本,则可以使用
米奇

1
为此,请喜欢StackExchange。完全为我工作。
马特忍者

很好..对我来说这是工作
贾廷·加迪亚

你怎么知道的,伙计???谢谢!
开发人员

29

这是一个已知问题,SSMS开发人员团队发布了新的官方解决方法。

您可以在以下链接中的Microsoft反馈系统上查看打开的凭单:https : //feedback.azure.com/forums/908035-sql-server/suggestions/37502512-ssms2018-installed-but-will-not-run

历史短:

提出的第一个解决方法是复制文件:Microsoft.VisualStudio.Shell.Interop.8.0.dll

从目录: C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PrivateAssemblies\Interop

进入目录: C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PublicAssemblies

后来,发布了更集中的解决方案(这是我使用的方法):只需删除文件C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Platform\Microsoft.VisualStudio.MinShell.Interop.pkgdef

无论如何,几天前,团队发布了更新,如您在上面的链接中所见。这是官方最新回应的引文:

在此期间,建议的解决方法是:

1)关闭所有SSMS实例

2)编辑ssms.exe.config

3)删除包含以下文本的行(应为第38行):NgenBind_OptimizeNonGac enabled =“ 1”

这与下一版本的SSMS 18.x中的更改相同。

注意!ssms.exe.config文件的位置在以下文件夹中:C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE


1
这应该是已批准的解决方法。
Omzig

你要跟它应该@Omzig,但由于某些原因,它甚至没有得到voting😃的最大数量
罗南艾瑞里

1
正确的解决方法.. !! 坦伴侣,这解决了这个问题。
Mohamed Ayas

你是最欢迎的@MohamedAyas😃
罗南·阿雷利

我有SQL Management Studio 2014,但没有这样的文件夹。ssms.exe.config位于C:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ Tools \ Binn \ ManagementStudio ...下,其内容与此处提到的无关。有什么帮助吗?
jstuardo

1

我刚刚在带有SQL Server 2017和SSMS 18.0的新构建的Server 2016上遇到了相同的问题,但是在2次重新启动后消失了,在此期间服务器已使用2019年3月的O / S修补程序进行了完全修补。我将尝试进行更多测试,以确定是否确实有O / S补丁对此有所帮助,但是与此同时,我没有意识到在该服务器上还安装了其他任何东西。

重新启动后似乎更加随机,但是我现在注意到的是SSMS在安装后就可以正常工作,但是我组织中的SCCM开始安装各种东西,SSMS停止工作。现在可疑的是“ .NET Framework 3.5 Server Feature 2016”


0

这个问题还有另一种解决方案。在Azure反馈项目SQL Server Management Studio 18 GA(15.0.18118.0)与.NET Framework 4.8不兼容的 Erich Signer建议:

第1步:

C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\CommonExtensions\Platform\Microsoft.VisualStudio.MinShell.Interop.pkgdef

重命名并确保该文件不再具有.pkgdef扩展名。或删除文件。

第2步:

删除以下注册表项(使用上面提到的“ .pkgdef”文件在SSMS 18启动时创建):

HKEY_CURRENT_USER\SOFTWARE\Microsoft\SQL Server Management Studio\18.0_IsoShell_Config\RuntimeConfiguration\dependentAssembly\bindingRedirection\{8BC7AF31-B6DA-4B97-8B36-F0500DECB147}

根据omzig最初发表的评论


0

我遇到了同样的问题,并且在寻找了一段时间之后,发现下面的逐步文章解决了这个问题:

提供的解决方案是:

将PrivateAssemblies \ Interop \ Microsoft.VisualStudio.Shell.Interop.8.0.dll文件(程序集版本为15.0.0.0的一个)复制到PublicAssemblies文件夹中。

步骤如下:

  • 首先,作为预防措施,作者将现有PublicAssemblies\Microsoft.VisualStudio.Shell.Interop.8.0.dll文件重命名为其他名称,以防万一我以后需要该文件。
  • 然后,他复制了Microsoft.VisualStudio.Shell.Interop.8.0.dll从文件PrivateAssemblies\InteropPublicAssemblies文件夹。

进行此更改后,SSMS加载没有任何问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.