我只是在仅安装了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 =中性,PublicKeyToken = b03f5f7f11d50a3a'或其
依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)
文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,
版本= 15.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'
--- > System.IO.FileLoadException:无法加载文件或程序集“ Microsoft.VisualStudio.Shell.Interop.8.0,版本= 8.0.0.0,
文化=中性,PublicKeyToken = b03f5f7f11d50a3a”或其中之一
依赖性。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)
文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,Version = 8.0.0.0,
文化=中性,PublicKeyToken = b03f5f7f11d50a3a'

WRN:装订绑定日志记录已关闭。要启用程序集绑定
故障日志记录,请将注册表值
[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。注意:与程序集相关的性能损失会有所减少。绑定失败
记录。若要关闭此功能,请删除注册表值
[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

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

System.IO.FileLoadException :无法加载文件或程序集
'Microsoft.VisualStudio.Shell.Interop.8.0,版本= 8.0.0.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其
依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)
文件名:'Microsoft.VisualStudio.Shell.Interop.8.0,Version = 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,但问题仍然存在。

评论

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

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

#1 楼

我只是用来自C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\PublicAssemblies的副本覆盖了..\PrivateAssemblies\Interop中的Microsoft.VisualStudio.Shell.Interop.8.0.dll,并打开了IDE。 (感谢米奇(Mitch)发现了令人讨厌的DLL名称。)

今天看起来像是一个受欢迎的问答,所以我很高兴知道这不仅是我。

评论


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

–安德兹
19年5月24日在12:08

像魅力和救生员一样工作。谢谢。

–HartleySan
19年6月17日在16:52

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

–Hairgami_Master
19年6月19日在19:43

可爱!!谢谢。

– Mihai Bjn
12月10日17:31

#2 楼

根据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
 


评论


gacutil的任何版本都可以。或者,如果未安装SDK版本,则可以使用powershell。

–米奇
19年5月12日,0:56

为此,请喜欢StackExchange。完全为我工作。

–马特忍者
19年6月13日在7:53

很好..这对我有用

–贾廷·加迪亚(Jatin Gadhiya)
19年6月16日在8:10

你怎么知道的,伙计???谢谢!

– DmitryBoyko
19年7月23日在3:55

#3 楼

这是一个已知问题,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

评论


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

–欧姆齐
19年7月19日在14:48

您应该使用@Omzig,但是由于某种原因,它甚至没有获得最多的投票数😃

–罗恩·阿里(Ronen Ariely)
19年7月20日在17:12

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

– Mohamed Ayas
19年8月1日在7:29

不客气@MohamedAyas😃

–罗恩·阿里(Ronen Ariely)
19年8月2日在17:46

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

–jstuardo
19年8月28日在18:56



#4 楼

我刚刚在带有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”。

#5 楼

我遇到了同样的问题,并且在搜索了一段时间后发现了解决此问题的以下分步指南:


SSMS:如何修复SQL Server Management Studio未解决问题

提供的解决方案是:复制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\Interop复制到PublicAssemblies文件夹中。任何问题。

#6 楼

这个问题还有另一种解决方案。关于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.0_IsoShell_Config\RuntimeConfiguration\dependentAssembly\bindingRedirection\{8BC7AF31-B6DA-4B97-8B36-F0500DECB147}

基于omzig最初留下的评论