摘要
我在Visual Studio 2017和2019中打开了.NET461解决方案,并尝试对其进行编译。内部版本抱怨ShimWindowsIdentity
在相应的Test项目中找不到。构建没有问题,尤其是Visual Studio 2015中的ShimWindowsIdentity
。
目标
我需要对WindowsIdentity
的构造函数进行填充以对功能进行单元测试。我知道可以包装WindowsIdentity
,但这需要我现在要避免的代码更改(重构)。
到目前为止已尝试
我已经尝试并检查了以下内容,以获取WindowsIdentity
在VS 2017/2019中工作的垫片:
mscorlib.fakes
所需的存根和垫片TargetFrameworkVersion
v4.6.1
mscorlib.fakes
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
<Assembly Name="mscorlib" Version="4.0.0.0"/>
<StubGeneration>
<Clear />
<Add FullName="System.IO.Stream!"/>
</StubGeneration>
<ShimGeneration>
<Clear/>
<Add FullName="System.Security.Principal"/>
<Add FullName="System.DateTime!"/>
<Add FullName="System.IO.Stream!"/>
</ShimGeneration>
</Fakes>
期望
生成WindowsIdentiy
的垫片。
实际
我在mscorlib.4.0.0.0.Fakes.messages
中看到以下警告:Cannot generate shim for System.Security.Principal.WindowsIdentity: type is not supported because it is not available or changed between versions.
答案 0 :(得分:0)
尝试伪造HttpRequest.LogonUserIdentity有一些有趣的时间
据此 https://developercommunity.visualstudio.com/content/problem/35053/ms-fakes-is-unable-to-generate-stubs-for-types-inc.html 您必须以4.6.2或最新安装的.net Framework版本为目标。试试看
我个人无法在我的环境(使用.net 4.8)中为该特定类生成填充。我尝试定位461,462,48。在4.8版本中,我最终收到另一条消息: 无法为System.Security.Principal.WindowsIdentity + d__95生成填充程序:由于内部限制,不支持该类型。
对我来说,将目标指向其他版本是没有任何意义的,因为我的Web应用程序是内置的(4.6.1),所以我只是放弃并使用伪造的包装器伪造了HttpRequestBase类,并重写了httpRequest.LogonUserIdenity来返回我需要的东西。