i've installed vs2015, @ same time installed .net framework 4.6, , autofixture 3.30.8 unable create claim object. i'm guessing having new .net framework version 4.6 causing issue inside autofixture.
i created test project (targeting .net framework 4.5.1) containing following code in vs2013:
using system; using microsoft.visualstudio.testtools.unittesting; using ploeh.autofixture; namespace autofixturetester { [testclass] public class unittest1 { [testmethod] public void cancreateclaim() { var fixture = new fixture(); fixture.behaviors.add(new omitonrecursionbehavior()); var claim = fixture.create<system.security.claims.claim>(); // exception here assert.isnotnull(claim); } } } the error follows:
ploeh.autofixture.objectcreationexception: autofixture unable create instance system.io.stream, because has no public constructor, abstract or non-public type. request path: system.security.claims.claim --> system.io.binaryreader reader --> system.io.binaryreader --> system.io.stream input --> system.io.stream @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.seedignoringrelay.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.parameterrequestrelay.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.methodinvoker.<>c__displayclass2.<create>b__0(parameterinfo pi) @ system.linq.enumerable.whereselectarrayiterator`2.movenext() @ system.collections.generic.list`1..ctor(ienumerable`1 collection) @ system.linq.enumerable.tolist[tsource](ienumerable`1 source) @ ploeh.autofixture.kernel.methodinvoker.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.seedignoringrelay.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.parameterrequestrelay.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.methodinvoker.<>c__displayclass2.<create>b__0(parameterinfo pi) @ system.linq.enumerable.whereselectarrayiterator`2.movenext() @ system.collections.generic.list`1..ctor(ienumerable`1 collection) @ system.linq.enumerable.tolist[tsource](ienumerable`1 source) @ ploeh.autofixture.kernel.methodinvoker.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.kernel.seedignoringrelay.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.autopropertiestarget.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.postprocessor`1.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.compositespecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.tracingbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.terminatingwithpathspecimenbuilder.create(object request, ispecimencontext context) @ ploeh.autofixture.behaviorroot.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.recursionguard.create(object request, ispecimencontext context) @ ploeh.autofixture.fixture.create(object request, ispecimencontext context) @ ploeh.autofixture.kernel.specimencontext.resolve(object request) @ ploeh.autofixture.specimenfactory.create[t](ispecimencontext context, t seed) @ ploeh.autofixture.specimenfactory.create[t](ispecimencontext context) @ ploeh.autofixture.specimenfactory.create[t](ispecimenbuilder builder) @ autofixturetester.unittest1.cancreateclaim() in d:\sandbox\autofixturetester\autofixturetester\unittest1.cs:line 16 before installing vs2015, way of creating claim object used work. sent solution colleague has vs2013 installed , works him.
i noticed f12-navigating claim code shows metadata 4.5.1 dlls. there issue vs2015 installer screwing 4.5.1 dlls? or bug in autofixture installing 4.6 has unearthed?
i compared dotpeek output system.security.claims.claim machine colleague's one. shows:
// assembly location: c:\program files (x86)\reference assemblies\microsoft\framework\.netframework\v4.5.1\mscorlib.dll where mine shows:
// assembly location: c:\windows\microsoft.net\framework\v4.0.30319\mscorlib.dll his has 5 constructors taking either strings or claimsidentity.
mine has 7 constructors, including 2 new ones this:
public claim(binaryreader reader) { ... } and
public claim(binaryreader reader, claimsidentity subject) { ... } i guess workaround case somehow force autofixture use specific constructor. make me nervous breaking change has slipped through microsoft's net. there other changes this?
as workaround getting autofixture work before, customized way creates claim choose constructor parameters.
fixture.customize<system.security.claims.claim>( c => c.fromfactory(new methodinvoker(new greedyconstructorquery()))); the reason issue seems installing 4.6 has affected 4.5.1 dlls. claim has 7 constructors, , 2 new constructors take binaryreader argument depends on stream cannot constructed autofixture. luckily, autofixture nice , configurable :)
as mentioned above, make me nervous breaking change has slipped through microsoft's net. worries me if decide add constructor in future framework 4.7, taking 20 arguments including binaryreader, creek again.
Comments
Post a Comment