Service 服务在一台服务器上运行,但在另一台服务器上运行~无法解析类型名称或别名xxx
我对服务有意见。我正在通过高级安装程序安装文件安装该服务,安装后,它在开发服务器上运行良好 但是,当尝试在不同的服务器上使用相同的安装文件安装服务时,该服务在启动过程中崩溃,并显示以下错误消息:Service 服务在一台服务器上运行,但在另一台服务器上运行~无法解析类型名称或别名xxx,service,dependency-injection,unity-container,alias,Service,Dependency Injection,Unity Container,Alias,我对服务有意见。我正在通过高级安装程序安装文件安装该服务,安装后,它在开发服务器上运行良好 但是,当尝试在不同的服务器上使用相同的安装文件安装服务时,该服务在启动过程中崩溃,并显示以下错误消息: Description: The process was terminated due to an unhandled exception. Exception Info: System.InvalidOperationException at Microsoft.Practices.Unity.
Description: The process was terminated due to an unhandled exception.
Exception Info: System.InvalidOperationException
at Microsoft.Practices.Unity.Configuration.ConfigurationHelpers.TypeResolverImpl.ResolveType(System.String, Boolean)
at Microsoft.Practices.Unity.Configuration.RegisterElement.GetRegisteringType()
at Microsoft.Practices.Unity.Configuration.RegisterElement.ConfigureContainer(Microsoft.Practices.Unity.IUnityContainer)
at Microsoft.Practices.Unity.Configuration.ContainerElement+<>c__DisplayClass1.<ConfigureContainer>b__0(Microsoft.Practices.Unity.Configuration.ContainerConfiguringElement)
at Microsoft.Practices.ObjectBuilder2.EnumerableExtensions.ForEach[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>, System.Action`1<System.__Canon>)
at Microsoft.Practices.Unity.Configuration.ContainerElement.ConfigureContainer(Microsoft.Practices.Unity.IUnityContainer)
at Microsoft.Practices.Unity.Configuration.UnityConfigurationSection.Configure(Microsoft.Practices.Unity.IUnityContainer, System.String)
at Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(Microsoft.Practices.Unity.IUnityContainer, Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, System.String)
at Microsoft.Practices.Unity.Configuration.UnityContainerExtensions.LoadConfiguration(Microsoft.Practices.Unity.IUnityContainer, Microsoft.Practices.Unity.Configuration.UnityConfigurationSection)
at NFCommonImplementation.Factory.NfUnityContainer..ctor()
at NFCommonImplementation.Factory.NfUnityContainer.get_Instance()
at NFObjectFactory.CommonObjectFactory..ctor()
at NFObjectFactory.CommonObjectFactory.<.cctor>b__0()
at System.Lazy`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].CreateValue()
at System.Lazy`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].LazyInitValue()
at System.Lazy`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].get_Value()
at NFDataImporter.ImportService.<Start>b__2()
at System.Threading.ThreadHelper.ThreadStart_Context(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
at System.Threading.ThreadHelper.ThreadStart()
我已经检查了unity配置文件,该文件的内容如下:
[...]
<typeAlias alias="INetReportDao"
type="NFCommonInterfaces.Database.DAO.INetReportDao, NFCommonInterfaces, Version=6.0.0.1, Culture=neutral, PublicKeyToken=c98e951d4a9d1d0a" />
[...]
<typeAlias alias="NetReportDao"
type="NFCommonImplementation.Database.DAO.NetReportDao, NFCommonImplementation, Version=6.0.0.1, Culture=neutral, PublicKeyToken=c98e951d4a9d1d0a" />
[...]
<register type="INetReportDao" mapTo="NetReportDao">
</register>
[...]
[…]
[...]
[...]
[...]
我还检查了NFCommonImplementation.dll和NFCommonInterfaces.dll是否位于服务可执行文件的旁边
现在我已经束手无策了。从理论上讲,它应该可以工作,因为安装程序在两台服务器上安装的服务版本完全相同。但是,由于某些原因,它在一台服务器上工作,而不是在另一台服务器上工作
可能是我缺少依赖关系吗?安装程序已经自动识别VisualC++ 2012的VisualC++的可重分配的依赖项并安装它。是否在开发服务器而不是测试服务器上安装了其他对此所需的依赖项,从而可能导致此问题?好的,经过一些调查,我找到了解决问题的方法,在进一步调查后,我找到了导致此问题的原因: 修复方法: 丢失的.dll必须安装到GAC中。最简单的方法是使用以下PowerShell脚本:
Set-location "[dll file location]"
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
$publish = New-Object System.EnterpriseServices.Internal.Publish
$publish.GacInstall("[dll file name]")
原因是:
在开发服务器上,生成过程将有问题的.dll安装到自定义程序集缓存中,如果在该服务器上运行,服务可以访问该缓存。但是,它自然无法在任何其他服务器上找到这些文件
我希望这能帮助其他遇到类似困难的人
Set-location "[dll file location]"
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
$publish = New-Object System.EnterpriseServices.Internal.Publish
$publish.GacInstall("[dll file name]")