Почему возникает исключение инициализатора типа Moq.Proxy.CastleProxyFactory при использовании NET40-NoCastle?

Итак, я скопировал пример кода с домашней страницы Moq практически дословно и получаю исключение прокси замка.

Вот мой код (как консольное приложение для более простой пример)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Moq;

namespace MoqTestConsole
{
    public interface ILoveThisFramework
    {
        bool DownloadExists(string s);
    }

    class Program
    {
        static void Main(string[] args)
        {
            Mock mock = new Mock();

            // WOW! No record/replay weirdness?! :)
            mock.Setup(framework => framework.DownloadExists("2.0.0.0")).Returns(true);

            // Hand mock.Object as a collaborator and exercise it, 
            // like calling methods on it...
            ILoveThisFramework lovable = mock.Object;
            bool download = lovable.DownloadExists("2.0.0.0");

            // Verify that the given method was indeed called with the expected value
            mock.Verify(framework => framework.DownloadExists("2.0.0.0"));
        }
    }
}

Все компилируется хорошо, но когда он вызывает mock.Object Выдается следующее исключение.

System.TypeInitializationException was unhandled
  Message=The type initializer for 'Moq.Mock`1' threw an exception.
  Source=Moq
  TypeName=Moq.Mock`1
  StackTrace:
       at Moq.Mock`1.b__0() in d:\Code\moq\src\Source\Mock.Generic.cs:line 138
       at Moq.PexProtector.Invoke(Action action) in d:\Code\moq\src\Source\PexProtector.cs:line 56
       at Moq.Mock`1.InitializeInstance() in d:\Code\moq\src\Source\Mock.Generic.cs:line 136
       at Moq.Mock`1.OnGetObject() in d:\Code\moq\src\Source\Mock.Generic.cs:line 153
       at Moq.Mock.GetObject() in d:\Code\moq\src\Source\Mock.cs:line 152
       at Moq.Mock.get_Object() in d:\Code\moq\src\Source\Mock.cs:line 147
       at Moq.Mock`1.get_Object() in d:\Code\moq\src\Source\Mock.Generic.cs:line 131
       at MoqTestConsole.Program.Main(String[] args) in C:\Projects\Test\MoqTestConsole\MoqTestConsole\Program.cs:line 25
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.TypeInitializationException
       Message=The type initializer for 'Moq.Proxy.CastleProxyFactory' threw an exception.
       Source=Moq
       TypeName=Moq.Proxy.CastleProxyFactory
       StackTrace:
            at Moq.Proxy.CastleProxyFactory..ctor()
            at Moq.Mock`1..cctor() in d:\Code\moq\src\Source\Mock.Generic.cs:line 54
       InnerException: System.IO.FileNotFoundException
            Message=Could not load file or assembly 'Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc' or one of its dependencies. The system cannot find the file specified.
            Source=Moq
            FileName=Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
            FusionLog==== Pre-bind state information ===
LOG: User = jsi-dev-001\jmacintyre
LOG: DisplayName = Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
 (Fully-specified)
LOG: Appbase = file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Castle.Core, Version=2.5.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core.DLL.
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core/Castle.Core.DLL.
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core.EXE.
LOG: Attempting download of new URL file:///C:/Projects/Test/MoqTestConsole/MoqTestConsole/bin/Debug/Castle.Core/Castle.Core.EXE.

            StackTrace:
                 at Moq.Proxy.CastleProxyFactory..cctor()
            InnerException: 

Таким образом, похоже, что компонент Castle Proxy отсутствует, но я имею в виду двоичный файл из каталога NET40-NoCastle .

Последняя версия Moq (Moq.4.0.10827)

И я новичок в Moq, поэтому я могу делать что-то чрезвычайно сложное.

17
задан John MacIntyre 28 October 2010 в 15:48
поделиться