如何在.NET461中填充System.Security.Principal.WindowsIdentiy?

时间:2019-04-11 07:36:51

标签: c# microsoft-fakes windows-identity

摘要

我在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.

1 个答案:

答案 0 :(得分:0)

尝试伪造HttpRequest.LogonUserIdentity有一些有趣的时间

  1. 据此 https://developercommunity.visualstudio.com/content/problem/35053/ms-fakes-is-unable-to-generate-stubs-for-types-inc.html 您必须以4.6.2或最新安装的.net Framework版本为目标。试试看

  2. 我个人无法在我的环境(使用.net 4.8)中为该特定类生成填充。我尝试定位461,462,48。在4.8版本中,我最终收到另一条消息: 无法为System.Security.Principal.WindowsIdentity + d__95生成填充程序:由于内部限制,不支持该类型。

对我来说,将目标指向其他版本是没有任何意义的,因为我的Web应用程序是内置的(4.6.1),所以我只是放弃并使用伪造的包装器伪造了HttpRequestBase类,并重写了httpRequest.LogonUserIdenity来返回我需要的东西。