У меня установлена (только) Visual Studio 2010. Я пытаюсь запустить свои модульные тесты из системы сборки командной строки. Вся моя работа по разработке находится в моем домашнем каталоге на сервере Linux, который используется совместно с Samba. Когда я пытаюсь запустить NUnit, я получаю сообщение об ошибке:
Unhandled Exception: System.TypeInitializationException: The type initializer for 'NUnit.ConsoleRunner.Runner' threw an exception. ---> System.Security.Security
Exception: That assembly does not allow partially trusted callers.
at NUnit.ConsoleRunner.Runner..cctor()
The action that failed was:
LinkDemand
The assembly or AppDomain that failed was:
nunit-console-runner, Version=2.5.9.10305, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77
The method that caused the failure was:
NUnit.Core.Logger GetLogger(System.Type)
The Zone of the assembly that failed was:
Intranet
The Url of the assembly that failed was:
file:///Z:/gitrepos/smarties/dependencies/Windows-x86/NUnit-2.5.9.10305/bin/net-2.0/lib/nunit-console-runner.DLL
--- End of inner exception stack trace ---
at NUnit.ConsoleRunner.Runner.Main(String[] args)
at NUnit.ConsoleRunner.Class1.Main(String[] args)
Я пытался использовать caspol.exe, как описано здесь: Редактировать и запускать проекты .NET из общих сетевых ресурсов
>caspol -addgroup 1.2 -url file:///Z:/* FullTrust -name MyZShare
Microsoft (R) .NET Framework CasPol 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
WARNING: The .NET Framework does not apply CAS policy by default. Any settings shown or modified by CasPol will only affect applications that opt into using
CAS policy.
Please see http://go.microsoft.com/fwlink/?LinkId=131738 for more information.
The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Added union code group with "-url" membership condition to the Machine level.
Success
Не имеет очевидного эффекта.
В других инструкциях содержится указание найти инструмент политики безопасности Microsoft .NET в разделе «Администрирование» на панели управления, но такого инструмента у меня нет. (Это потому, что у меня только Visual Studio 2010, а не более ранние версии? Я использую 64-разрядную версию Windows 7 Pro, если это имеет значение.)
Я просто хочу, чтобы .NET поверил, что этот каталог находится на моей собственной машине, а не в интрасети. Я не хочу, чтобы какой-либо из этого кода запускался из сетевого ресурса при развертывании, только как часть разработки. Я также не хочу слепо доверять всем сетевым ресурсам, хотя даже это было бы более приемлемым обходным путем, чем копирование всего на локальный диск каждый раз, когда я хочу запустить тест.
Я бы предпочел не подписывать все под строгими именами на данном этапе разработки. (И я даже не уверен, поможет ли это, поскольку NUnit, по-видимому, завершает работу до того, как загрузит мою сборку.)
РЕДАКТИРОВАТЬ - В конце концов оказалось, что я пытался решить не ту проблему. Пока я выяснял, как заставить NUnit запускать тесты .NET 4.0 без подпроцесса, я обнаружил следующее:
http://frater.wordpress.com/2010/05/04/debugging-nunit-tests-under-visual-studio-2010/
Там написано:
Согласно этой странице вы также должны добавить эту строку в элемент времени выполнения [в nunit-console.exe.config]:
<loadFromRemoteSources enabled="true" />
Это позволяет загружать библиотеки с удаленного сайта (например, с веб-сайта) с полным доверием. Я не уверен, почему это было бы необходимо, и действительно, мое приложение прекрасно отлаживало NUnit без него. Однако, если у вас есть проблемы, вы можете попробовать.
Это устранило мою проблему, и мне не пришлось разбираться с caspol.