Как настроить систему.Безопасность.Принципал.WindowsIdentiy в .NET461?

#c# #microsoft-fakes #windows-identity

#c# #microsoft-подделки #windows-identity

Вопрос:

Краткие сведения

Я открыл решение .NET461 в VisualStudio 2017 и 2019 и попытался его скомпилировать. Сборка жалуется, что ShimWindowsIdentity не может быть найдена в соответствующем тестовом проекте. Проблем со сборкой нет, особенно ShimWindowsIdentity в Visual Studio 2015.

Цель

Мне нужно вставить конструктор функции 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:

Было весело провести время, пытаясь подделать 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.Безопасность.Принципал.WindowsIdentity d__95: тип не поддерживается из-за внутренних ограничений.

Для меня нет никакого смысла настраивать другие версии, кроме встроенного в мое веб-приложение (4.6.1), поэтому я просто сдался и подделал класс HttpRequestBase с поддельной оболочкой и переопределенным HttpRequest .LogonUserIdenity возвращает то, что мне нужно.