部署后,Console App无法正常工作

时间:2014-02-03 23:20:11

标签: c# dependency-injection console-application unity-container

我有一个非常简单的控制台应用程序,它在开发机器上完全按预期工作。它不会抛出任何错误。但是,我将它移动到测试服务器(希望从任务管理器运行它)并且我收到了错误,我将在下面包含这些错误。

项目详细信息:使用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文件夹中。完成这两件事后,应用程序按预期工作。

1 个答案:

答案 0 :(得分:0)

我不得不同意thumbmunkeys。几乎可以肯定的是,装配缺失或装配的版本不正确。检查并查看。