我有一个非常简单的控制台应用程序,它在开发机器上完全按预期工作。它不会抛出任何错误。但是,我将它移动到测试服务器(希望从任务管理器运行它)并且我收到了错误,我将在下面包含这些错误。
项目详细信息:使用Telerik Open Access ORM,Unity 2.1.505.0的C#console app .NET 4.0 测试服务器:运行.NET 4.5
以下是我移植应用程序的方法:编译发布版本并将Release文件夹复制到测试服务器(这是问题吗?我在别处读到这应该可以正常工作)。进入测试服务器后,双击复制的发布文件夹中的.exe并收到以下消息:
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: TheProgram.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 52f01aa9
Problem Signature 04: Anonymously Hosted DynamicMethods Assembly
Problem Signature 05: 0.0.0.0
Problem Signature 06: 0
Problem Signature 07: 0
Problem Signature 08: ffffffff
Problem Signature 09: AVANCNVQQH3AW3N14UWVEHHCIAYOLYLS
OS Version: 6.1.7601.2.1.0.274.10
Locale ID: 1033
Additional Information 1: 8e3d
Additional Information 2: 8e3d05599b3d6894d98ff944d1bc5d05
Additional Information 3: 527f
Additional Information 4: 527fbc2b98d11a1bd024767ee818ba21
测试服务器的事件查看器包含以下错误信息:
Application: TheProgram.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: Microsoft.Practices.Unity.ResolutionFailedException
Stack:
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(System.Type, System.Object, System.String, System.Collections.Generic.IEnumerable`1<Microsoft.Practices.Unity.ResolverOverride>)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(System.Type, System.String, System.Collections.Generic.IEnumerable`1<Microsoft.Practices.Unity.ResolverOverride>)
at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Practices.Unity.IUnityContainer, Microsoft.Practices.Unity.ResolverOverride[])
at TheProgram.Program.Main(System.String[])
这看起来像Unity无法解决依赖关系。但同样,开发机器上没有错误。
Unity设置非常简单。其中大部分是在Program.Main()方法中:
// Initialize Unity DI Elements
var UnityContainer = new UnityContainer();
UnityContainer.RegisterType<IRepository, Repository>(new ContainerControlledLifetimeManager());
UnityContainer.RegisterType<IDataService, DataService>(new ContainerControlledLifetimeManager());
UnityContainer.RegisterType<ISpreadsheetService, SpreadsheetService>(new ContainerControlledLifetimeManager());
UnityContainer.RegisterType<IEmailService,EmailService>(new ContainerControlledLifetimeManager());
UnityContainer.RegisterType<IDateService,DateService>(new ContainerControlledLifetimeManager());
var data = UnityContainer.Resolve<IDataService>();
var sheet = UnityContainer.Resolve<ISpreadsheetService>();
var email = UnityContainer.Resolve<IEmailService>();
var dates = UnityContainer.Resolve<IDateService>();
测试服务器上的控制台输出指向第二个块的第一行 - 解析IDataService的那一行。
DataService也非常直接。这是它的构造函数信息:
public class DataService : IDataService
{
private readonly IRepository _repo;
public DataService(IRepository repo)
{
_repo = repo;
}
并且存储库没有依赖关系(尽管我在其上调用了Resolve&lt;&gt; - 这是一个问题吗?)
我对Unity很陌生,但这似乎是一个非常简单的实现。
有没有人知道为什么在尝试在测试服务器上运行.exe时发生错误?谢谢!
更新:当我包含以下行时出现问题:var data = unityContainer.Resolve<IDataService>();
到目前为止,它有效。这个类还有一个依赖关系,如上所示IRepository被注入到它的构造函数中 - 这个依赖项是否被正确处理? Unity的语法是否正确?
第二次更新:该应用不再显示错误。我发现了2个问题...首先,代码中没有解决依赖关系,所以这是固定的;第二,该应用程序正在寻找Telerik .dll。我将这些添加到bin文件夹中。完成这两件事后,应用程序按预期工作。
答案 0 :(得分:0)
我不得不同意thumbmunkeys。几乎可以肯定的是,装配缺失或装配的版本不正确。检查并查看。