понедельник, 17 декабря 2018 г.

атрибут InternalsVisibleTo

наткнулся на такой полезный атрибутик:

[assembly: InternalsVisibleTo("TestConsole")]

это - некий отдаленный аналог объявления дружественного класса в C++.
для сборки, чье имя передано в качестве параметра, все internal-объявления выглядят как публичные.
Это полезно при юнит-тестировании для тестирования protected-методов: объявляем метод "protected internal", вписываем атрибут с именем тестовой сборки в AssemblyInfo.cs тестируемой - и - ву а ля - в тестовой сборке наш метод выглядит как публичный.

P.S. в качестве имени сборки нужно указывать содержимое свойства сборки "Assembly Name"

среда, 21 ноября 2018 г.

Unity - использование генериков-зависимостей

демо код, говорит сам за себя

interface I<T>
{

}

class C { }
class A : I<C> { }
class B<T>
{
    private readonly I<T> _i;

    public B(I<T> i)
    {
        _i = i;
    }
}

static void Main(string[] args)
{

    using (var container = new UnityContainer())
    {

        container.RegisterType<I<C>, A>();

        B<C> b = container.Resolve<B<C>>();

        Console.WriteLine("DONE");
    }
}

пятница, 21 сентября 2018 г.

суббота, 12 мая 2018 г.

как вернуть пункт "создать - документ в формате RTF" в контекстное меню проводника

windows 8. стоит OpenOffice, одно время стояли просмотрщик вордовских файлов от Microsoft

в итогде, пункта меню не было.
он вернулся после приведения раздела реестра "HKEY_CLASSES_ROOT\.rtf" к такому виду:








*для windows 7 сработало это решение:
https://www.itsupportguides.com/knowledge-base/windows-7/windows-7-add-rtf-rich-text-document-to-new-context-menu/

суббота, 21 апреля 2018 г.

Nuget - удаление пакета из всех проектов

get-project -All | Uninstall-Package EntityFramework
удалит EntityFramework из всех проектов решения, где он есть

работает за счет механизма конвеерной (pipeline) передачи данных между командлетами Power Shell

пятница, 20 апреля 2018 г.

подробная информация от IIS об ошибке при отладке вэб-приложения

запускаем вэб-проект в Visual Studio (2017 Pro, под дефолтовым встроенным IIS Express) и происходит что-то необъяснимое, например, 500-ошибка, а до вашего кода дело так и не доходит.
где посмотреть подробности:
%userprofile%\documents\IISExpress\TraceLogFiles  (это - по дефолту, может меняться, вроде)
в подпапке, сответствующей вашему проекту (можно тупо все удалить, воспроизвести ошибку и войти в созданную папку) лежат xml-файлы с подробным описанием ошибки (и xsl-файл). перетаскиваем XML в IE (11), и он, используя XSL-файл, красиво рендерит подробную инфу по ошибке

брейкпойнты на исходниках Entity Framework

1) настраиваем Visual Studio на отладку исходников.  У меня Visual Studio 2017 Professional.
Tools - Options - Debugging.
В General:  выкл. "Enable just my code".
может, еще что-то менял - не помню. ниже - скриншоты опций отладки Студии.

2) выясняем версию EF, которая нам нужна: в проекте, где у нас добавлен EF, смотрим packages.config:
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />
у меня - 6.1.3

3) заходим в вэб-интерфейс репозитория исходников EF (https://github.com/aspnet/EntityFramework6), переключаемся на соотв. тег и скачиваем исходники:


4) открываем в скачанном солюшен EntityFramework.sln. Нас интересуют в нем проекты EntityFramework и EntityFramework.SqlServer

5) отключаем подписывание проектов.  Без этого у меня не заработало. Не вникал сильно, что это. Свойства проекта - Signing - Sign the assembly - выключить. для обоих проектов так поступить

6) строим эти 2 проекта. результат построения находим в папке "bin\Debug"

7) копируем эти файлы в папку, где в вашем проекте лежат EntityFramework.dll и EntityFramework.SqlServer.dll. при этом в этой папке заменятся dll-файлы и добавятся pdb-файлы

8) поскольку новые dll-ки не подписаны, нужно в web.config (или app.config) из строки вида
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 удалить ", PublicKeyToken=b77a5c561934e089"


все, после этого в стеке вызовов отображаются вызовы EF, по дабл-клику переходит к соотв. исходникам. по идее, и брейкпойнты работают (но не проверил)
да, с заголовком не очень вяжется, согласен :)


Скриншоты опций отладки Студии






суббота, 10 февраля 2018 г.

tortoice git - настройка тренировочной площадки

как у себя на компе сделать удаленный git-репозиторий и две подключенных к нему  локальный рабочих папки. чтоб потом экспериментировать и тренироваться мерджить и разрешать конфликты