C# Microsoft安全更新MS13-004后在MSTest中执行单元测试时发生System.InvalidProgrammeException

C# Microsoft安全更新MS13-004后在MSTest中执行单元测试时发生System.InvalidProgrammeException,c#,castle-windsor,mstest,nuget-package,castle-dynamicproxy,C#,Castle Windsor,Mstest,Nuget Package,Castle Dynamicproxy,在2013年1月8日应用Microsoft安全更新后,我们在构建服务器上的CI构建中以及在开发箱上运行测试时开始出现故障 我们得到一个System.InvalidProgrameException:公共语言运行库检测到一个无效程序 只有在使用MSTest运行使用Castle Windsor DynamicProxy的测试时才会发生这种情况,尽管我不认为DynamicProxy有错 下面是一段生成异常的代码示例 [TestMethod] public void应可用于生成动态ProxyForanO

在2013年1月8日应用Microsoft安全更新后,我们在构建服务器上的CI构建中以及在开发箱上运行测试时开始出现故障

我们得到一个System.InvalidProgrameException:公共语言运行库检测到一个无效程序

只有在使用MSTest运行使用Castle Windsor DynamicProxy的测试时才会发生这种情况,尽管我不认为DynamicProxy有错

下面是一段生成异常的代码示例

[TestMethod]
public void应可用于生成动态ProxyForanObject()
{
var container=新的WindsorContainer();
container.Register(Component.For());
container.Register(Component.For())
.Instance(新的TestDependency(“从测试框架调用”))
(生活方式,短暂),;
container.Register(Component.For())
.由()实施
.Interceptors(InterceptorReference.ForType())
在任何地方
(生活方式,短暂),;
var service=container.Resolve();
AreEqual(“从测试框架调用”,service.MethodNumberOne());
}    
这将生成一个堆栈跟踪,在调用DynamicProxy中的MixinData构造函数时引发异常:

Castle.DynamicProxy.MixinData..ctor(IEnumerable`1个mixinInstances) Castle.DynamicProxy.ProxyGenerationOptions.Initialize() Castle.DynamicProxy.Generator.InterfaceProxyWithTargetGenerator.GenerateCode(类型proxyTargetType,类型[]接口,ProxyGenerationOptions) Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithTarget(类型interfaceToProxy,类型[]AdditionalInterfaceToProxy,类型targetType,ProxyGenerationOptions) Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithTarget(类型interfaceToProxy,类型[]AdditionalInterfaceToProxy,类型targetType,ProxyGenerationOptions) Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget(类型interfaceToProxy,类型[]additionalInterfacesToProxy,对象目标,ProxyGenerationOptions,IInterceptor[]拦截器) Create(IKernel内核、对象目标、组件模型、CreationContext上下文、对象[]构造函数参数) Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext上下文,构造函数Candidate构造函数,对象[]参数) Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext上下文,构造函数Candidate构造函数,对象[]参数) Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext上下文) Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext上下文) Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext上下文,负担) Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext上下文,布尔跟踪外部) Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationContext上下文,IReleasePolicy releasePolicy) Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext上下文、布尔要求解除委托、布尔要求实例、负担和负担) Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext上下文,需要布尔实例) Castle.MicroKernel.Handlers.AbstractHandler.Resolve(CreationContext上下文) Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler处理程序、类型服务、IDictionary附加参数、IReleasePolicy策略) Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(类型服务、IDictionary参数、IReleasePolicy策略) Castle.MicroKernel.DefaultKernel.Resolve(类型服务,IDictionary参数) Castle.Windsor.WindsorContainer.Resolve 应在TestCastleWindsorDynamicProxyForAnObject()中生成TestCastleWindsorDynamicProxyForAnObject():第34行

我的第一个想法是,在创建代理时,DynamicProxy在安全更新之后实际上生成了无效的IL,但据我所知,情况并非如此,因为它还没有发展到那个程度。我对Castle进行了反编译,并逐步使用调试器,当通过如下调用从ProxyGenerationOptions类调用MixinData构造函数时,我看到异常按照堆栈跟踪抛出(注意:在上面的代码示例中,this.mixin将为null,但这是预期的,并且在被调用的构造函数的代码中得到了正确处理):

this.mixinData=newcastle.DynamicProxy.mixinData(this.mixins);
在MSTest runner之外,一切都按预期运行,我们的应用程序继续运行,并且在xUnit中甚至在使用MSTest的TestDriven.NET中运行单元测试时,它们不会生成异常。我们只看到这种行为在Visual Studio中运行测试,或者在自动化生成中使用TFS和MSBuild脚本

在我们向微软提出支持票之前,我想我们会问一下,是否有其他人也经历过类似的事情,或者对导致我们问题的原因有什么想法

编辑:在今天早上浏览了一些新内容之后,我们发现这实际上似乎与我们正在使用的Castle NuGet包有关。当我们使用最新的NuGet包引用Castle时,我们最终引用了为.NET Client Profile 4编译的Castle.Core程序集erence是上述异常的原因(为什么?我还不能完全确定)。将引用更改为为为.NET3.5编译的版本可确保