Страницы

Поиск по вопросам

Показаны сообщения с ярлыком visual-studio-2017. Показать все сообщения
Показаны сообщения с ярлыком visual-studio-2017. Показать все сообщения

пятница, 28 февраля 2020 г.

Папки с дополнительными NuGet пакетами для .net Core

#visual_studio_2017 #net_core #nuget


Исходные данные: ПК без доступа к интернету, VS2017 и проект на .net Core.
На ПК есть общая "офлайн папка с пакетами", откуда черпаются все основные (например
%userprofile%\.nuget\packages\).
Вопрос: Можно ли проекту указать дополнительную папку, в которой бы брались пакеты,
которые не были найдены в общей папке? Только для этого проекта.
    


Ответы

Ответ 1



Папка %userprofile%\.nuget\packages\ представляет из себя Local Feeds - папка с иерархичной структурой хранения nuget-пакетов, из которой можно устанавливать nuget-пакеты. Для того, чтобы подключить дополнительный Local Feeds в проект, вы можете сделать: На уровне папки проекта создайте файл NuGet.Config. В этом файле прописать следующее содержимое Элемент packageSources содержит список источников для установки пакетов. Если вы используете NetCore2.0, тогда путь до источника nuget-пакетов можно указать прямо в файле проекта(csproj) следующим образом $(RestoreSources);c:\packages; https://api.nuget.org/v3/index.json

Ответ 2



Может то, а может не совсем, но тем не менее. Из [Spec] Fallback package folders: Fallback package folders allow packages to be shared across users and machines to reduce disk space. These folders are treated as fallback folders for the primary global packages folder (%USERPROFILE%.nuget\packages). They differ from package sources in that the package assets will be referenced directly and will not be copied into the user's packages folder. The concept of a fallback package folder can be thought of as a GAC for nupkgs. [Spec] NuGet settings in MSBuild Свойство RestoreFallbackFolders - Fallback folders, these are used in the same way the user packages folder is used. Свойство RestoreAdditionalProjectFallbackFolders - Additional fallback folders appended to the resulting list of fallback folders Имеется пакет NLog в global packages folder. Если запустить сборку проекта, то в логах будет видно, что пакет подгружается из упомянутой директории: 1> Primary reference "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c". 1> Resolved file path is "C:\Users\username\.nuget\packages\nlog\4.5.7\lib\netstandard2.0\NLog.dll". 1> Reference found at search path location "{HintPathFromItem}". 1> This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true". 1> The ImageRuntimeVersion for this reference is "v4.0.30319". Добавим в проект с помощью свойства RestoreAdditionalProjectFallbackFolders резервный источник: C:\Users\username\Desktop\Username Удаляем NLog из global packages folder (в искомой "офлайн папке" пакета не оказалось) и запускаем сборку проекта: 1> Primary reference "NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c". 1> Resolved file path is "C:\Users\username\Desktop\Username\nlog\4.5.7\lib\netstandard2.0\NLog.dll". 1> Reference found at search path location "{HintPathFromItem}". 1> This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true". 1> The ImageRuntimeVersion for this reference is "v4.0.30319". В рамках restore операции пакет подгружается из FallbackFolder если оный отсутствует в global packages folder, и не копируется в него по окончанию. Даже при наличии доступа к сети, пакет берется из FallbackFolder. UPD: В случае использования packageSources не до конца понятна ситуация с приоритетностью источников, ибо тут сказано, что: All feeds are queried and the one with the shortest response time wins. Кроме того, пакеты из локального источника будут копироваться в global packages folder, т.е дублироваться.

суббота, 22 февраля 2020 г.

Удаленная отладка Visual Studio 2017

#отладка #visual_studio_2017


Для отладки приложений Visual Studio 2015, развернутых на других компьютерах я пользовался
удаленным отладчиком Remote Debugger Visual Studio 2015. Сейчас, решил перейти на Visual
Studio 2017, все успешно, проекты работают и все собирается. Но вот я что-то не могу
найти удаленный отладчик для новой версии среды разработки, где искать? Данного функционала
еще нет? В самой VS2017 есть пункты Debug=>Attach to Process... но где взять сам отладчик,
для установки на сервер? 

На MSDN нашел утилиты для отладки только для 2012, 2013 и 2015 версии: Remote Debugging

Для справки, установлена: Microsoft Visual Studio 2017 Enterprise Edition
Удаленный сервер, где ранее был установлен удаленный отладчик для VS2015 и успешно
работал с ней в паре: Microsoft Windows Server 2012 
    


Ответы

Ответ 1



При установке пункт меню не был создан. Но отладчик нашелся там же, где он был у предыдущих версий - по пути C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Remote Debugger\x64 (ну и соответственно х86-версия рядышком). Сам он есть, просто ярлык не создается. Достаточно скопировать папку x64/x86 на удаленную машину и запустить с правами администратора файл msvsmon.exe

Ответ 2



После долгих поисков на MSDN удаленного отладчика для Visual Studio 2017 нашел одну довольно-таки интересную статью: Remote Debugging, опубликованную 4 ноября 2016 года. Там есть пункт: Download and Install the Remote Tools - это именно то, что нужно. Переходим по ссылке на страницу Visual Studio Downloads, там находим пункт: Tools for Visual Studio 2017, раскрываем список и находим Remote Tools for Visual Studio 2017 и скачивает отладчик нужной версии кликнув на кнопку Download напротив пункта меню. Поиск через поисковые системы Google и Yandex результатов не дал, сумел найти только во внутреннем поиске MSDN. Надеюсь данный вопрос и ответ будут полезны другим участникам.

воскресенье, 16 февраля 2020 г.

Удаленная отладка Visual Studio 2017

#отладка #visual_studio_2017


Для отладки приложений Visual Studio 2015, развернутых на других компьютерах я пользовался
удаленным отладчиком Remote Debugger Visual Studio 2015. Сейчас, решил перейти на Visual
Studio 2017, все успешно, проекты работают и все собирается. Но вот я что-то не могу
найти удаленный отладчик для новой версии среды разработки, где искать? Данного функционала
еще нет? В самой VS2017 есть пункты Debug=>Attach to Process... но где взять сам отладчик,
для установки на сервер? 

На MSDN нашел утилиты для отладки только для 2012, 2013 и 2015 версии: Remote Debugging

Для справки, установлена: Microsoft Visual Studio 2017 Enterprise Edition
Удаленный сервер, где ранее был установлен удаленный отладчик для VS2015 и успешно
работал с ней в паре: Microsoft Windows Server 2012 
    


Ответы

Ответ 1



При установке пункт меню не был создан. Но отладчик нашелся там же, где он был у предыдущих версий - по пути C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Remote Debugger\x64 (ну и соответственно х86-версия рядышком). Сам он есть, просто ярлык не создается. Достаточно скопировать папку x64/x86 на удаленную машину и запустить с правами администратора файл msvsmon.exe

Ответ 2



После долгих поисков на MSDN удаленного отладчика для Visual Studio 2017 нашел одну довольно-таки интересную статью: Remote Debugging, опубликованную 4 ноября 2016 года. Там есть пункт: Download and Install the Remote Tools - это именно то, что нужно. Переходим по ссылке на страницу Visual Studio Downloads, там находим пункт: Tools for Visual Studio 2017, раскрываем список и находим Remote Tools for Visual Studio 2017 и скачивает отладчик нужной версии кликнув на кнопку Download напротив пункта меню. Поиск через поисковые системы Google и Yandex результатов не дал, сумел найти только во внутреннем поиске MSDN. Надеюсь данный вопрос и ответ будут полезны другим участникам.

воскресенье, 2 февраля 2020 г.

Сборка проекта для .NET и .NET Core

#c_sharp #net #visual_studio #visual_studio_2017 #net_core


При написании библиотеки, код которой валиден как для .NET Framework, так и для .NET
Core, приходится создавать два разных проекта со своими зависимостями и практически
одинаковым кодом.

Текущее положение дел (необходимость отдельно обновлять код соседнего проекта и отдельно
его собирать) меня не очень устраивает. И пусть я написал скрипт для автоматизации
этого, знаю, что есть решение получше. Можно как-то модифицировать сам проект в Visual
Studio для достижения таковых целей:


Возможность выбирать целевую платформу
В зависимости от неё указывать символы в духе NETCORE, NET (по
типу DEBUG), дабы в некоторых местах менять платформо-зависимый код
В зависимости от неё использовать определённые пакеты




Как лучше организовать решение поставленной задачи?
    


Ответы

Ответ 1



При использовании SDK based формата для файлов проекта (.csproj) можно указать несколько целевых платформ для сборки в элементе TargetFrameworks. Также можно использовать атрибут Condition для условного указания зависимостей. Test.csproj: Latest Exe netcoreapp2.1; net472; AnyCPU Test.cs: using System; namespace Test { class Program { static void Main() { Console.WriteLine("Hello World!"); #if NETFRAMEWORK Console.WriteLine(".NET Framework"); Console.WriteLine((System.Numerics.Vector)new System.Numerics.Vector(42)); #elif NETCOREAPP Console.WriteLine(".NET Core"); Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(new { a = 1, b = 2 })); #else Console.WriteLine("Unknown"); #endif } } } Gist

Ответ 2



отдельно обновлять код соседнего проекта у Вас две копии кода? Положите cs файлы в третье место и добавьте их в оба проекта, используя опцию "Add As Link" в окне "Add Existing File".

пятница, 31 января 2020 г.

Как использовать отладку при запуске программы?

#c_sharp #visual_studio #отладка #visual_studio_2017


Первая программа запускает вторую. У второй меняются относительные пути на путь расположения
первой. Путь становится неверным.

При этом я не могу использовать режим отладки чтобы посмотреть какой путь неверный,
тк эта программа запускается не в visual studio а через другую.
    


Ответы

Ответ 1



Проще всего вот как. В подходящем месте в начале второй программы напишите if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); Первую программу запускайте без Visual Studio. Когда вторая программа будет запущена, появится диалог: Выберите в нём экземпляр Visual Studio для отладки и нажмите OK. Откроется отладчик Visual Studio и загрузит вашу программу.

Ответ 2



Если нужно именно отладить косвенно запускаемый процесс, а не просто приаттачить отладчик в определенный момент, или если не хочется менять код и пересобирать стороннее приложение ради остановки, то можно использовать расширение Microsoft Child Process Debugging Power Tool. Устанавливаете его в студию, включаете отладку в настройках. Ставите чекбокс Enable native code debugging в свойствах проекта: и студия начинает автоаттачить дебаггер к дочерним процессам.

пятница, 24 января 2020 г.

Отсутствуют AccountController и папка Account во Views при использовании Identity

#c_sharp #aspnet_mvc #aspnet_core #visual_studio_2017


При создании проекта ASP.NET Core(2.1) Web Application => MVC Не нахожу в архитектуре
AccountController и папки Account во Views. Авторизацию сделал, проходит, но внести
изменения в оформление и функционал страниц логина не могу, так как не нахожу их в
проекте. Подскажите, где их найти, или как вносить изменения?
    


Ответы

Ответ 1



Начиная с Asp.Net Core 2.1, Identity вынесена в отдельную либу (Razor Class Library), поэтому нет ни контроллеров, ни представлений. Чтобы кастомизировать Identity, нужно использовать Scaffolder - он позволяет выборочно добавлять исходный код нужных компонентов в проект, чтобы его можно было править. Вот, как это сделать: From Solution Explorer, right-click on the project > Add > New Scaffolded Item (Создать шаблонный элемент). From the left pane of the Add Scaffold dialog, select Identity(Удостоверение) > Add. In the Add Identity dialog, select the options you want. Подробности в документации.

среда, 22 января 2020 г.

Символ “красный круг с минусом” в “обозревателе решений”

#git #visual_studio_2017


Добрый день.
Появился символ "красного круга с минусом" в "обозревателе решений". (Скриншот ниже)
При наведении на него курсора всплывает подсказка "пропущен". Код компилируется, программа
запускается. 
До этого переместил папку решения в другую папку и создал git-репозиторий.
Подскажите, пожалуйста, что значит этот символ и, чем грозит, если его игнорировать?


    


Ответы

Ответ 1



Загляните в файл .gitignore, возможно данные файлы / папка пропускаются / игнорируются. Переключитесь в представление папок, там найдете .gitignore.

Копирование файла настроек в шаблоне проекта Visual Studio

#c_sharp #visual_studio_2017 #visual_studio_extensions


Делаю шаблон проекта VS и хочу, чтобы создаваемый проект содержал настройки и аргументы
запуска внешней программы. Файл с настройками должен быть просто скопирован в каталог
проекта. 

Сами настройки VS хранит в файле $projectname$.csproj.user на который нет никаких
ссылок из файла проекта (.csproj).

Тут возникает проблема: VS не копирует файлы, которые не задействованы в файле проекта.
В $projectname$.csproj должно быть прописано что-то вроде такого , чтобы файл $projectname$.csproj.user был, все-таки, скопирован. Но тогда он появляется
в Solution Explorer и настройки из него считываются только после переоткрытия решения.

Project.vstemplate:


    
      AssemblyInfo.cs
      ProjectTemplate.csproj.user
    



Как можно решить эту проблему?
    


Ответы

Ответ 1



Можно скрыть элемент в Solution Explorer, если указать значение метасвойства Visible: За старый формат проекта не отвечаю. Скорее всего, там надо указывать отдельным элементом: false Это поможет избавиться от лишнего элемента в проекте, но вряд ли поможет с чтением настроек только после переоткрытия решения. Это попахивает ограничением IDE: разработчики, скорее всего, просто не рассчитывали, что пользовательские настройки будут создаваться не пользователем. Кстати, если перейдёте на новый формат проекта, то там профили запуска лежат отдельным красивым файлом launchSettings.json, и профилей может быть много с разными настройками. Рекомендую.

понедельник, 6 января 2020 г.

сборка проектов Visual Studio 2017

#c_sharp #visual_studio #uwp #visual_studio_2017


такой вопрос: допустим, я включил какой-либо фреймворк в проект через нугет, но использую
из него всего лишь некоторую часть. те компоненты, которые я не использую, студия будет
включать в установочные пакеты приложения при сборке ? Просто, возможно, если фреймворк
вестит 5 - 8 мегабайт, а использую я из него 2 - 3 десятка классов, не более, есть
смысл просто скопировать эти классы в код, не добавляя сам фреймворк, чтобы он место
не забирал ? 
    


Ответы

Ответ 1



те компоненты, которые я не использую, студия будет включать в установочные пакеты приложения при сборке? Да. есть смысл просто скопировать эти классы в код, не добавляя сам фреймворк, чтобы он место не забирал ? Если исходный код доступен и его лицензия позволяет так делать, то можете так сделать. Иначе я бы не советовал. А вообще вы пытаетесь экономить на спичках.

Как убрать предупреждение “Сборка My.dll неверно указана как файл”?

#c_sharp #visual_studio #visual_studio_2017


Библиотеки подключаемые не через NuGet, сложили в папку dll в каталоге проекта. Добавили
ссылки на них, всё работает, но при построении в Visual Studio в Списке ошибок выдаётся
предупреждение


  Сборка "dll\My.dll" неверно указана как файл.


Что от меня хочет MsBuild и как избавиться от предупреждения?



фрагменты .csproj:


  dll\My.dll

...
...


    


Ответы

Ответ 1



Эта строчка говорит о том, что этому файлу в свойстве Build Action указано Content. Описание ошибки в MSDN никак не связано с значением BuildAction=Content которое я нашел в этом ответе. Описание ошибки MSB3178: Assembly '' is incorrectly specified as a file. This warning is generated during application manifest generation when the build process detects that a file reference is actually a (managed or native) assembly. Это предупреждение выдается если в процессе сборки обнаружена ссылка на файл который на самом деле является управляемой сборкой или нативной библиотекой. Описание значения Build Action=Content Content: Allows you to retrieve a file (in the same directory as the assembly) as a stream via Application.GetContentStream(URI). For this method to work, it needs a AssemblyAssociatedContentFile custom attribute which Visual Studio graciously adds when you mark a file as "Content" Добавляет возможность получить содержимое файла в виде потока с помощью метода Application.GetContentStream(URI). Файл должен быть помещен в той же папке что и текущая сборка. Тем не менее, здесь можно найти ответ, который рекомендует для решения аналогичной проблемы изменить Build Action на None. Это не принятый ответ, но у него самое большое количество плюсов. Я не сумел воспроизвести аналогичную ошибку и проверить ответ. Но нашел подтвержение ему в этом блоге. This time I tried something else, this time I set the build action to none and copy if newer for each of the dll’s generating this warning. It seems to have gotten rid of the warnings plus the program still compiles and runs (with complete directory clean). На этот раз я попробовал кое-что еще. Я установил build action в none и задал опцию copy if newer для каждой dll, которая выдавала это предупреждение. Кажется, это помогло избавиться от предупреждений, плюс программу можно было скомпилировать и запустить. Поэтому я советую попробовать установить свойство Build Action=None. Скорее всего это поможет решить проблему. Так как у меня нет локализованного интерфейса студии, прикладываю скриншот, на тот случай если будущим читателям будет необходима подсказка - как найти это свойство в студии. Нужно выделить файл в Solution Explorer (Обозреватель решений), и тогда его свойства станут доступны в этом окне.

пятница, 3 января 2020 г.

Как написать текст символами в консоль Visual Studio?

#cpp #visual_studio #visual_cpp #visual_studio_2017


Язык программирования с++. Нужно вставить надпись 

        cout << "███████████████████████████████████" << endl; 
        cout << "█─███─█───█─███────█────█─███─█───█" << endl;
        cout << "█─███─█─███─███─██─█─██─█──█──█─███" << endl;
        cout << "█─█─█─█───█─███─████─██─█─█─█─█───█" << endl;
        cout << "█─────█─███─███─██─█─██─█─███─█─███" << endl;
        cout << "██─█─██───█───█────█────█─███─█───█" << endl;
        cout << "███████████████████████████████████" << endl;
        cout << "██████████" << endl;
        cout << "█───█────█" << endl;
        cout << "██─██─██─█" << endl;
        cout << "██─██─██─█" << endl;
        cout << "██─██─██─█" << endl;
        cout << "██─██────█" << endl;
        cout << "██████████" << endl;
        cout << "██████████████" << endl;
        cout << "█───█─██─█───█" << endl;
        cout << "██─██─██─█─███" << endl;
        cout << "██─██────█───█" << endl;
        cout << "██─██─██─█─███" << endl;
        cout << "██─██─██─█───█" << endl;
        cout << "██████████████" << endl;
        cout << "█████████████████████" << endl;
        cout << "█────█────█─███─█───█" << endl;
        cout << "█─████─██─█──█──█─███" << endl;
        cout << "█─█──█────█─█─█─█───█" << endl;
        cout << "█─██─█─██─█─███─█─███" << endl;
        cout << "█────█─██─█─███─█───█" << endl;
        cout << "█████████████████████" << endl;

    


Ответы

Ответ 1



Можно отображать и в UTF-8 (cp65001), но c этой кодировкой обычно больше проблем. Проще выводить в UTF-16, в этом случае не придется дополнительно возится с кодировкой файлов и консоли, только поставить режим вывода стандартного потока: #include #include #include #include int main() { ::_setmode(::_fileno(stdout), _O_U16TEXT); auto const & sz_message { L"███████████████████████████████████" L"\n" L"█─███─█───█─███────█────█─███─█───█" L"\n" L"█─███─█─███─███─██─█─██─█──█──█─███" L"\n" L"█─█─█─█───█─███─████─██─█─█─█─█───█" L"\n" L"█─────█─███─███─██─█─██─█─███─█─███" L"\n" L"██─█─██───█───█────█────█─███─█───█" L"\n" L"███████████████████████████████████" L"\n" }; ::std::wcout << sz_message << ::std::flush; ::_wsystem(L"pause"); return(0); } С пиксельным шрифтом 8х12 (в этом случае еще не будет антиалиасинга и разрывов между строками):

вторник, 24 декабря 2019 г.

Папка .vs весит слишком много Visual Studio 2017

#cpp #visual_studio_2017


На сколько я знаю, папка ".vs" предназначена для хранения пользовательских настроек
проэкта.
Раньше, на Visual Studio 2015 такая папка весила до 10мб, но стоило мне обновится
до 2017 вижуалки и объем папки (в том же самом проекте) стал занимать более 400 мб.
И так во всех других проектах. Даже если создать полностью чистый проэкт, то папка
.vs уже весит до 20 мб.

Вопрос состоит в следующем:
Если это баг, то как исправить?
Если это не баг, то существует ли возможность настроить объем данной папки?
    


Ответы

Ответ 1



У вас в папке .vs складируется база intellisense. Это можно отключить выставив в настройках студии на вкладке Text Editor -> C/C++ -> Advanced -> Fallback Location опцию Always use Fallback Location на True и опцию Do not Warn If Fallback Location Used на True. В этой группе еще есть третья опция, позволяющая задавать конкретное расположение для этих данных (по-умолчанию они попадают в temp кажется). После этого следует закрыть студию (все) и удалить папку .vs. При следующем запуске студия заново создаст базу для intellisense в новом расположении, а в папке .vs будет только маленький файл .suo. Кроме того, при добавлении в репозиторий папку .vs следует исключать в любом случае.

Ответ 2



Папка .vs не только для пользовательских настроек, а вообще для складирования всяких вспомогательных данных. Как минимум там кэшируется индекс IntelliSens`a. В предыдущих версиях студия создавала, для своих нужд, в папке с решением отдельные файлы, теперь видимо это все решили в отдельную папку свалить чтобы было меньше бардака. Явной специальной настройки объема папки .vs в студии нет. Навряд ли это ошибка.

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

Как поменять line endings в Visual Studio 2017 (русская версия)?

#c_sharp #visual_studio #visual_studio_2017


Скачала Unity, пишу скрипт на C# в Microsoft Visual Studio, но возникает проблема
inconsistent  line endings. 

Везде пишут, что нужно зайти в Файл - Дополнительные параметры сохранения, но у меня
нет такой опции. Есть только сохранить, сохранить как и сохранить все (в меню "Сохранить
как" тоже нет никаких дополнительных опций). 

Где же все-таки поменять line endings?
    


Ответы

Ответ 1



Не путайте 2015 и 2017 студию. Вот у меня обе стоят: на 2015 такой пункт есть, а на 2017 его нет, потеряли. (В ней допустим потеряли также и настройки публикации asp.net mvc проекта, мне было неудобно) Пока не поправят -- пользуйтесь хоткеем File.AdvancedSaveOptions (штатно на Ctrl+Alt+Z находится). Я этот хоткей запомнил очень хорошо: однажды пришлось пробежаться по всему проекту поправить кодировку и постоянно в меню кликать мышкой было долго и неудобно, быстрее и получилось через хоткей. Так и запомнил. Что ещё: В 2015 студии этот пункт меню появляется только когда открыт файл и настройка применяется к одному конкретному выделенному файлу. Возможно, ваши файлы находятся в git и возможно, что вы используете не очень удобные параметры настройки git config core.autocrlf на компьютере (очень много тем на en so, а на русском есть вот такая тема)

Ответ 2



Дополнительные параметры сохранения перекочевали в кнопку "Сохранить". Выберите File → Save as... У кнопки Save вы увидите стрелку вниз, которая ведет к дополнительным параметрам сохранения (Save with Encoding...). В ней вы найдете нужные вам параметры.

воскресенье, 22 декабря 2019 г.

Создание расширений VS, сортировка using по длине строки

#visual_studio_2017 #visual_studio_extensions


Товарищи, проблема следующая: привык в своих проектах сортировать usingи (и не только)
по длине строки. То есть код рода:

using System.Collections.Generic;
using System;
using System.Linq;
using System.IO;


Я обязательно переделаю в:

using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;


И только тогда успокоюсь) 
Так вот. Я немного устал делать это вручную, так что хочу спросить: есть ли какое-либо
легкое расширение (подозреваю, что ReSharper так умеет, но его я не рассматриваю) для
Visual Studio 2017, способное выполнять сортировку выделенных строк по их длине?
    


Ответы

Ответ 1



Собственно, никто мне так и не ответил, сам же я не нашел подходящего расширения. Но кто ж мне мешал написать свое? Сие я и сделал. Расширение теперь висит в Marketplace, а именно - здесь. Оформлять сильно все это я, понятное дело, не стал, ибо делал сие только под себя, но мало ли кому-то когда-нибудь тоже пригодится такая мелочь, а ставить внушительные расширения хотят далеко не все. Ну и давайте заодно уж рассмотрим пример создания такого простейшего расширения на поставленной задаче. 0) Для начала создадим VSIX Project (расширения для Visual Studio можно писать на Visual C++, Visual Basic, C#. Я это дело писал на C#). Если шаблон такого проекта отсутствует в списке доступных, установите соответствующий пункт с помощью Visual Studio Installer. 1) Добавим в проект элемент Custom Command и назовем его "CommandSort". В появившийся класс "CommandSort.cs" добавим следующий код: using System; using System.Linq; using Microsoft.VisualStudio.Shell; using System.ComponentModel.Design; namespace LineSorter { internal sealed class CommandSort { #region Var private AsyncPackage Package { get; } public int CommandId { get; } = 0x0100; public static CommandSort Instance { get; private set; } public static Guid CommandSet { get; } = new Guid("e9f69e2b-6313-4c2b-9765-1ddd6439d519"); #endregion #region Init private CommandSort(AsyncPackage Package, OleMenuCommandService CommandService) { this.Package = Package ?? throw new ArgumentNullException(nameof(Package)); CommandService = CommandService ?? throw new ArgumentNullException(nameof(CommandService)); CommandID menuCommandID = new CommandID(CommandSet, CommandId); MenuCommand menuItem = new MenuCommand(Execute, menuCommandID); CommandService.AddCommand(menuItem); } public static async System.Threading.Tasks.Task InitializeAsync(AsyncPackage Package) { ThreadHelper.ThrowIfNotOnUIThread(); Instance = new CommandSort(Package, await Package.GetServiceAsync((typeof(IMenuCommandService))) as OleMenuCommandService); } #endregion #region Functions private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); TextSelection.GetSelection(Package).OrderBy(x => x.Length).ThenBy(x => x).ReplaceSelection(); } #endregion } } Инициализатор нашей команды, ее ID и GUID в рамках проекта будут установлены VS автоматически. По сути от нас требуется изменить лишь метод Execute. 2) Для более удобной работы с выделенным текстом создадим класс "TextSelection" и в "TextSelection.cs" внесем таковой код: using EnvDTE; using System; using System.Linq; using System.Windows; using System.Collections.Generic; using Microsoft.VisualStudio.TextManager.Interop; namespace LineSorter { public static class TextSelection { #region Var public static IServiceProvider ServiceProvider { get; set; } #endregion #region Functions /// /// Получим выделенный текст и избавим его от пробелов и табуляции в начале/конце строк /// public static IEnumerable GetSelection(IServiceProvider ServiceProvider) { TextSelection.ServiceProvider = ServiceProvider; IVsTextManager2 textManager = ServiceProvider.GetService(typeof(SVsTextManager)) as IVsTextManager2; int result = textManager.GetActiveView2(1, null, (uint)_VIEWFRAMETYPE.vftCodeWindow, out IVsTextView view); view.GetSelectedText(out string selectedText); return selectedText.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim(new char[] { ' ', '\t' })); } public static void ReplaceSelection(this IEnumerable Selections) { ReplaceSelection(Selections, ServiceProvider); } /// /// Заменим выделенный текст на указанную коллекцию строк /// public static void ReplaceSelection(this IEnumerable Selections, IServiceProvider ServiceProvider) { DTE dte = ServiceProvider?.GetService(typeof(DTE)) as DTE; if (dte is null) return; IDataObject obj = Clipboard.GetDataObject(); Clipboard.SetText(string.Join("\r\n", Selections)); dte.ExecuteCommand("Edit.Paste"); Clipboard.SetDataObject(obj); } #endregion } } Логика кода, думаю, вполне ясна. Однако заострю внимание на методе замены выделенного текста на новую коллекцию (ReplaceSelection). Изначально код выглядел так: DTE dte = ServiceProvider?.GetService(typeof(DTE)) as DTE; if (dte is null) return; EnvDTE.TextSelection selection = dte.ActiveDocument?.Selection as EnvDTE.TextSelection; if (selection is null) return; selection.Text = string.Join("\r\n", Selections); И все кажется вполне логичным: просто заменяем выделенный текст на новый. Во многих мануалах я как раз такой подход и видел. Однако предостерегаю от такого подхода к работе с выделенным текстом, так как работает это жутко медленно. Свойство EnvDTE.TextSelection.Text при установке зачем-то парсит весь вставляемый текст, разбивая его на смысловые единицы. Поясню: к примеру, мы имеем 2 таких using'a, которые мы хотим отсортировать: using Microsoft.VisualStudio.Shell.Interop; using Task = System.Threading.Tasks.Task; Для нашего алгоритма важно лишь то, что это 2 строки. Однако указанное свойство разбивает все это дело на смысловой набор: using, Microsoft, VisualStudio, Shell, Interop, using, Task, System, Threading, Tasks, Task И мы имеем уже не 2 строки, а 11 отдельно обрабатываемых элементов. С ростом числа сортируемых строк число обрабатываемых смысловых единиц катастрофически растет, так что простенькое действие при таком подходе начинает занимать внушительный промежуток времени. Именно поэтому я воспользовался маленькой хитростью: Я сохраняю текущее состояние буфера обмена После этого загоняю в него объединенную коллекцию наших строк А теперь уже запускаю функцию вставки из самой VS (как бы Ctrl + V). Так что текст моментально вставляется на место выделенного, после чего форматируется самой средой После сего действа возвращаю буферу обмена прошлое состояние Честно - не знаю, насколько хорошо это решение, однако оно уж точно быстрее стандартного пути. Если будут идеи более правильной реализации - буду рад выслушать! 3) Что ж. Разобрались, собственно, с кодом. Осталось навести порядок в конфиге (CommandSortPackage.vsct): Таким образом мы добавляем кнопку с указанным текстом и ссылающуюся на наше действие в контекстное меню VS, а также связываем с ним горячие клавиши: (Ctrl + E) + (Ctrl + L) 4) Вот и все, наше простенькое расширение готово. Вы можете отдебажить его с помощью экспериментальной версии VS, или же просто собрать его, после чего среди уймы пакетов Вы найдете заветный файлик с расширением *.vsix, при помощи которого Вы можете либо сразу установить расширение в свою студию, либо же даже опубликовать его) А на сием - все) Спасибо за внимание)

суббота, 21 декабря 2019 г.

Как просмотреть значение переменной в cshtml при отладке Visual Studio?

#javascript #visual_studio #отладка #visual_studio_2017


При наведении на name не показывает её значение. 




После этой не хитрой манипуляции точки останова в среде разработки должны заработать
и Вы сможете увидеть, что у Вас находится в той или иной переменной в Вашем JavaScript-коде
в момент отладки определенного кода. Причем сайт нужно открывать в браузере Internet
Explorer, именно он дружит с Visual Studio, так как оба продукта от Microsoft.



4. Visual Studio 2017 в паре с Internet Explorer 11 и debugger

Пожалуй, самый банальный способ, как показала практика рассуждений с @Grundy - это
использование ключевого слова debugger внутри JavaScript-кода cshtml-страницы. 


Выбираем браузер по умолчанию для открытия нашего сайта Internet
Explorer.
Открываем сайт в IE и переходим в Настройки ->
Свойства браузера - вкладка Дополнительно -
раздел Обзор , убираем галочку напротив строки:
Отключить отладку сценариев (Internet Explorer), жмем
Применить, а затем ОК


После этого точки остановки в месте ключевого слова debugger срабатывают внутри среды
разработки Visual Studio 2017. 

Ссылка на источник по настройке VS и IE: How to debug (only) JavaScript in Visual
Studio?. 

Проверил на VS2017 в паре с IE11 в операционной системе Windows 10.


пятница, 20 декабря 2019 г.

Visual Studio 2017 на Windows 7

#c_sharp #visual_studio #visual_studio_2017


Собрался изучать C# по книге. В книге не рассказывалось как и что настраивать. Зашел
сам скачал бесплатную версию Visual Studio Community 2017 с официального сайта. После
установки указал C#. У компоненты указанные по умолчанию. У меня Windows 7/

Теперь запускаю мне нужно выбрать шаблон Console App. Его там не было, нашел что
можно создать через простой "пустой" шаблон. В конце концов оказалось что пакеты SDK
установлены только для Windows 10 и создать шаблон проекта не возможно. Зашел в установку
компонентов, там вообще нету для Windows 7.

Что мне делать, как работать с Windows 7?

Не много бомбануло от того что я же качал с Windows 7, качал версию для учащихся
студентов и так далее. И это среда разработанная именно для той ОС на которой я сижу
не могла автоматом определить или чего подсказать что вот вы ставите на семерку значит
вам мы предложим установить такие то файлы и компоненты, ибо у вас не запустится Windows
SDK 10. Но нет там по умолчанию было сказано установить это и то и в итоге нельзя нечего
разработать. Это как если бы я зашел с макбука и установил с AppStore какое-нибудь
приложение для Windows 8 причем успешно с инструкциями что нажать туда сюда, а при
запуске сказало что нет вы не можете его использовать здесь!
    


Ответы

Ответ 1



Запустите Visual Studio Installer. Под Visual Studio Community 2017 три кнопки - обновить, запустить и дополнительное меню (три горизонтальных полоски). Выберите дополнительное меню, в нём выберите пункт "Изменить". В открывшемся окне выберите те шаблоны, которые Вам нужны.

Visual studio 2017 отладка

#cpp #visual_studio #visual_studio_2017




Как запустить программу в visual studio на с++ ?
Нигде не найду в настройках, нет такой возможности попросту запустить код
В чем может быть проблема, и как решить? Там где иконка запуска есть только "присоединение"
но это явно не то что нужно 
    


Ответы

Ответ 1



Вы открываете .cpp файл, который содержит только код. А вам нужно открыть .sln файл, который откроет все решение, если, конечно, оно существует. Если нет, то создайте новый проект и добавьте в него данный файл.

Ответ 2



По всей видимости нужно предварительно создать проект, в него добавить Ваш *.cpp файл и пробовать собрать весь проект. Воспользуйтесь шаблоном проекта File -> New Project -> Win32 Console Application

воскресенье, 15 декабря 2019 г.

Не получается из консольного .Net Core сослаться на библиотеку .Net Standard

#net #visual_studio_2017 #net_core #net_standard


Создал библиотеку .net-standard, в ней определил класс Class1 и константу MyConst.

Далее создал консольное приложение .net-core, в нём набросал такой код:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Class1.MyConst);
        Console.ReadLine();
    }
}


В моем случае .Net Standard имеет версию 1.3, а .Net Core имеет версию 1.0.

UPD: Версия студии:  Microsoft VS Enterprise 2017 v. 15.4.0

(!)  Проблема в том, что не получается запустить консольное приложение. Консоль мигает
примерно на миллисекунду, но не ведет себя как ожидается, то есть, не выводит константу
с содержанием "Hello world" и не останавливается на Console.ReadLine();.

В output выводится следующая инфо:

Программа "[8376] dotnet.exe" завершилась с кодом -2147450749 (0x80008083).
Программа "[8376] dotnet.exe: Трассировка программы" завершилась с кодом 0 (0x0).


Ну да и из картинки видно, что к библиотеке .net-standard (в которой класс Class1,
в котором константа MyConst) так же идет обращение из WPF-ного приложения (.Net Framework
4.6). Здесь добавил нугет пакет и ссылка на библиотеку работает нормально, то есть,
приложение запускается и константа отображается. Думаю, что этот аспект к теме не относится.

Благодарю! 
    


Ответы

Ответ 1



По коду ошибки удалось найти: Перечисление StatusCode, в котором указано поле с данным значением - CoreHostLibMissingFailure ; Место где используется поле CoreHostLibMissingFailure - read_config_and_execute. Можно сделать вывод, что отсутствуют требуемые версии библиотек. После установки .NET Core SDK 1.1.10 ошибка у меня воспроизводиться перестала.

Настройка проекта Visual Studio 2017

#c_sharp #visual_studio_2017


При создании проекта на С# студия автоматически вставляет следующий код:

using System;

namespace ConsoleApp1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
}
}


Как этот код можно видоизменить, например чтобы функция Main не принимала никаких
параметров.

Или например как можно сделать, чтобы при создании нового класса студия автоматически
добавляла конструктор по умолчанию для класса?
    


Ответы

Ответ 1



Каждый проект, который вы добавляете в решение - он создаётся из определённого шаблона и вы можете создать свой собственный шаблон. Для этого создайте пустой проект, отредактируйте его так, как вам будет нужно - а после этого в меню File нажмите Export Template (для VS2015) или запустите мастер из Project - Export Template Wizard (в 2017 версии студии). По второй части вопроса (шаблон класса) есть отличный ответ на en so, выберите свою версию IDE. Например, для редакции VS 2017 Enterprise см. шаблон: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs Выглядит примерно следующим образом: using System; using System.Collections.Generic; $if$ ($targetframeworkversion$ >= 3.5)using System.Linq; $endif$using System.Text; $if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks; $endif$ namespace $rootnamespace$ { class $safeitemrootname$ { } } Ссылки по теме: Практическое руководство. Создание шаблонов проектов How to: Create Project Templates in VS 2015 How do I edit the Visual Studio templates for new C# class/interface? Переменные в шаблонах

воскресенье, 1 декабря 2019 г.

“Отладчик установлен неправильно” Visual Studio 17

#visual_studio #visual_studio_2017 #отладчик


Здравствуйте. 
Создал новый проект WPF в Студии, покидал нужных виджетов, пытаюсь запустить, получаю
ошибку:

Ошибка при попытке запуска проекта: не удалось запустить программу 
<путь>
Отладчик установлен неправильно. Запустите программу Setup для установки или 
восстановления отладчика.


Запускаю установщик, выбираю VS17 -> изменить. В сводке указанно (если это важно):


Включено


Средства разработки классических приложений
Средства разработки для .NET 4.6.1
C# и Visual Basic

Необязательные


Blend for visual studio
Инструменты для Entity Framework 6
Средства профилирования 
Поддержка языка F#
Средства разработки .NET Core 1.0 - 1.1

Среда выполнения .NET Core
Что еще может понадобиться, ума не приложу.


Не могли бы вы подсказать, в чем может быть дело?



Попытка переустановить студию приводит к сбою установки со следующей ошибкой (из журнала)

Не удалось восстановить пакет "Microsoft.Net.4.6.FullRedist,version=4.6.81.6".
        URL-адрес поиска: https://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.Net.4.6.FullRedist;PackageAction=Repair;ReturnCode=5100
        Затронутые рабочие нагрузки
            Основной редактор Visual Studio (Microsoft.VisualStudio.Workload.CoreEditor,version=15.0.26228.0)
        Затронутые компоненты
            Основной редактор Visual Studio (Microsoft.VisualStudio.Component.CoreEditor,version=15.0.26208.0)
        Журнал
            C:\Users\Илья\AppData\Local\Temp\dd_setup_20170524225231_002_Microsoft.Net.4.6.FullRedist.log
        Сведения
            Команда выполнена: "C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.Net.4.6.FullRedist,version=4.6.81.6\dotNetFx-x86-x64-AllOS-ENU.exe"
/q /norestart /repair /KeepAUPaused /ChainingPackage Visual_Studio_15_Setup /CEIPconsent
/log "C:\Users\Илья\AppData\Local\Temp\dd_setup_20170524225231_002_Microsoft.Net.4.6.FullRedist.log"
            Код возврата: 5100
            Сведения о коде возврата: Азия




По совету @Eikhner обновил windows, установил проблемный пакет руками, перезагрузился;
никакого эффекта. Попробовал восстановить студию, получаю сбой. Единственная ошибка,
которую пока удалось вынуть из журнала:

Не удалось установить перечисленные рабочие нагрузки и компоненты в продукте из-за
сбоев в пакете.

Неполные рабочие нагрузки
    Основной редактор Visual Studio (Microsoft.VisualStudio.Workload.CoreEditor,version=15.0.26228.0)

Неполные компоненты
        Основной редактор Visual Studio (Microsoft.VisualStudio.Component.CoreEditor,version=15.0.26208.0)

Вы можете искать решения по сведениям ниже, изменить выбор рабочих нагрузок и компонентов
и повторить установку, или же удалить продукт с компьютера.

Ниже перечислены отдельные сбои в пакете, которые сделали перечисленные выше рабочие
нагрузки и компоненты неполными. Чтобы найти имеющиеся отчеты об этих проблемах, скопируйте
и вставьте URL-адрес из сообщения о сбое пакета в адресную строку веб-браузера. Если
о проблеме уже сообщалось, вы сможете найти решения или обходные пути. В противном
случае вы можете создать новую запись о проблеме, в которой другие пользователи смогут
найти решения или обходные пути.

Не удалось восстановить пакет "Microsoft.Net.4.6.FullRedist,version=4.6.81.6".
        URL-адрес поиска: https://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.Net.4.6.FullRedist;PackageAction=Repair;ReturnCode=5100
    Затронутые рабочие нагрузки
        Основной редактор Visual Studio (Microsoft.VisualStudio.Workload.CoreEditor,version=15.0.26228.0)
    Затронутые компоненты
        Основной редактор Visual Studio (Microsoft.VisualStudio.Component.CoreEditor,version=15.0.26208.0)
    Журнал
        C:\Users\Илья\AppData\Local\Temp\dd_setup_20170529214845_002_Microsoft.Net.4.6.FullRedist.log
    Сведения
        Команда выполнена: "C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.Net.4.6.FullRedist,version=4.6.81.6\dotNetFx-x86-x64-AllOS-ENU.exe"
/q /norestart /repair /KeepAUPaused /ChainingPackage Visual_Studio_15_Setup /CEIPconsent
/log "C:\Users\Илья\AppData\Local\Temp\dd_setup_20170529214845_002_Microsoft.Net.4.6.FullRedist.log"
        Код возврата: 5100
        Сведения о коде возврата: Азия




@PashaPash, файл, о котором вы говорите, отсутствует, но есть с таким же именем и
расширением .log.html

OS Version = 6.0.6000, SP = 0.0, Platform 2
OS Description = Vista - x64 Ultimate Edition 
MSI = 5.0.7601.23593
Windows version = amd64_windowsfoundation_31bf3856ad364e35_6.1.7601.17514_none_615fdfe2a739474c.manifest
Windows servicing = 6.1.7601.18766
CommandLine = C:\f5fa5e713993e05ed093ae6f7e40\\Setup.exe /q /norestart /repair /KeepAUPaused
/ChainingPackage Visual_Studio_15_Setup /CEIPconsent /log "C:\Users\Илья\AppData\Local\Temp\dd_setup_20170529214845_002_Microsoft.Net.4.6.FullRedist.log"
/x86 /x64 /redist
Using Simultaneous Download and Install mechanism
Operation: Repairing
Package Name = Microsoft .NET Framework 4.6.1 Setup
Package Version = 4.6.01055
User Experience Data Collection Policy: AlwaysUploaded
Logging all the global blocks


Installation Blockers:

Не удается выполнить установку в режиме совместимости.

Final Result: Installation failed with error code: (0x000013EC), "A StopBlock was
hit or a System Requirement was not met." (Elapsed time: 0 00:00:08).


Система почему-то определилась как виста. Что бы это могло означать?
    


Ответы

Ответ 1



Для того, чтобы создать новый проект WPF в Visual Studio 2017, понадобится компонент: Данный компонент содержит в себе все необходимое, конечно, можно поставить дополнительные отдельные компоненты, такие как: Пакет SDK для .NET Framework 4.6.2 .NET Framework 4.6.2 Хотя, все что нужно выбирается автоматически и можно вручную выбрать то, чего не хватает: Если после обновления операционной системы Windows теперь не удается восстановить среду разработки Visual Studio 2017, то тут можно пойти двумя путями. Пробовать нужно сначала с менее затратного: Полностью удалить среду разработки Visual Studio 2017 со всеми ее вспомогательными элементами. После удаления не забывать перезагрузить компьютер и чистить мусор. Зависимые компоненты тоже удалять. Проверить обновления операционной системы Windows, при наличии - установить. Снова перезагрузить систему. Скачать последнюю версию установщика среды разработки Visual Studio 2017, запустить инсталлятор и выбрать необходимые рабочие нагрузки (обязательно выбрать Разработка классических приложений .NET и новый .NET Framework желательно). Завершить установку, при этом следовать инструкции, снова перегрузиться и пробовать создать новый проект, с нуля. (либо просто удалить и установить заново, но лучше конечно все почистить). Сначала показалось, что этот метод менее затратный, но по сути он более затратный, чем следующий, который будет предложен. Итак, быстрый и затратный способ сделать так, чтобы заработало: Перенести нужные файлы на диск, хранящиеся на диске с системой. Переустановить систему и накатить среду разработки Visual Studio 2017 с нуля. Да, я предлагаю такой ответ. Увы, если в среде разработки что-то сыпется, после чего она перестает исправно работать - это приводит к большим проблемам. Решать эти проблемы приходится долго и нудно. Устанавливать пакеты, докачивать компоненты, копировать файлы с рабочего компа на свой, выяснять, почему файлы приложения удалены или почему вдруг антивирус что-то заблокировал и удалил. На все это тратится слишком много времени. Если вам не удалось решить этот вопрос за несколько дней, то решение лежит на поверхности, займет всего пару часов. Сам недавно столкнулся с проблемой в Visual Studio, обновил - она стала глючить, затем перестал запускаться тестовый клиент WCF, затем стала сама перезагружаться. Переустановил среду разработки и все заработало. Как-то ранее при возникновении больших проблем пытался выяснить в чем проблема в среде разработки, но это отнимает слишком много времени. Тем более, сообщение об ошибке звучит так: “Отладчик установлен неправильно” Значит нужно установить правильно, а для этого, как минимум, нужно его удалить. А удаляется он лучше всего вместе со всей средой разработки Visual Studio. Как-то так.