#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
-
В соответствии с этим 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.Безопасность.Принципал.WindowsIdentity d__95: тип не поддерживается из-за внутренних ограничений.
Для меня нет никакого смысла настраивать другие версии, кроме встроенного в мое веб-приложение (4.6.1), поэтому я просто сдался и подделал класс HttpRequestBase с поддельной оболочкой и переопределенным HttpRequest .LogonUserIdenity возвращает то, что мне нужно.