Tengo (solo) Visual Studio 2010 instalado. Estoy intentando ejecutar mis pruebas unitarias desde un sistema de compilación de línea de comandos. Todo mi trabajo de desarrollo está en mi directorio de inicio en un servidor Linux que se comparte con Samba. Cuando trato de ejecutar NUnit Puedo obtener un error como este:Obtenga .NET para considerar un recurso compartido de red específico para ser totalmente confiable
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)
He intentado usar caspol.exe como se describe aquí: Edit and run .NET projects from network shares
>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
No tiene ningún efecto evidente.
Otras instrucciones me dicen que encuentre alguna herramienta de Política de seguridad de Microsoft .NET en Herramientas administrativas en el Panel de control, pero no tengo dicha herramienta disponible. (¿Esto es porque solo tengo Visual Studio 2010, no versiones anteriores? Estoy ejecutando Windows 7 Pro de 64 bits, si hace una diferencia.)
Realmente quiero que .NET crea que este directorio está en mi propia máquina y no parte de la intranet. No quiero que este código se ejecute desde un recurso compartido de red cuando se implementa, solo como parte del desarrollo. Tampoco quiero confiar ciegamente en todos los recursos compartidos de red, aunque incluso eso sería una solución más aceptable que copiar todo en un disco local cada vez que quiero ejecutar una prueba.
Preferiría no tener que firmar todo con nombres fuertes en este punto del desarrollo. (Y ni siquiera estoy seguro de si sería útil, ya que al parecer se NUnit fallando incluso antes de que se haya cargado mi montaje.)
EDITAR - Al final resultó que yo estaba tratando de resolver el problema equivocado . Mientras que encontrar la manera de llegar NUnit para ejecutar .NET 4.0 pruebas sin un subproceso, encontré esto:
http://frater.wordpress.com/2010/05/04/debugging-nunit-tests-under-visual-studio-2010/
Dice:
Según this page También debe agregar esta línea bajo la elemento de tiempo de ejecución [en nunit-console.exe.config]:
<loadFromRemoteSources enabled="true" />
Esto permite que las bibliotecas descargados de un mando a distancia si te (como un sitio web) para ser cargado con plena confianza. No estoy seguro de por qué esto sería necesario y, de hecho, mi aplicación depuró NUnit sin problemas. Sin embargo, si tiene problemas, puede intentarlo.
Esto me solucionó el problema sin tener que perder el tiempo con caspol.
Creo que lo que realmente quiere hacer es habilitar la zona 'Intranet local' en Configuración de Internet-> Seguridad, y agregar la ruta UNC a esa zona. También puede intentar ajustar la configuración de confianza. No estoy 100% seguro de esto, por lo tanto, lo estoy haciendo un comentario en lugar de una respuesta. – CodingGorilla