Страницы

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

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

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

Зачем в пользовательском контроле поле components?

#c_sharp #visual_studio #usercontrol

                    
При создании нового контрола студия всегда создаёт поле
private System.ComponentModel.IContainer components = null;

но никогда его не использует.
Для чего оно нужно?    


Ответы

Ответ 1



На форму можно положить не только контролы, но и невизуальные компоненты. В то время как контролы при закрытии формы освобождаются автоматически, т.к. форма знает о своих дочерних контролах и прибивает их, компоненты этим свойством не обладают, и их надо закрывать явно. Для этого дизайнер создаёт переменную components и в перекрытом методе Dispose() прибивает компоненты, которые положены на форму. Для того чтобы понять, чем недоволен компилятор, посмотрите на две вещи: 1. Есть ли на форме невизуальные компоненты? 2. Если есть, есть ли среди них компонент, конструктор которого принимает экземпляр IContainer. Правильно написанные компоненты должны иметь именно такой конструктор, который будет генерироваться дизайнером.

Ответ 2



Мой ответ может быть не очень точным. На самом то деле используется, там хранятся ссылки на компоненты (потому что форма это контейнер) и при закрытии формы идет освобождение ресурсов (компонентов). Там в комментариях еще же написано: Required designer variable.

Статическая библиотека: убрать зависимость от внутренних библиотек

#cpp #lib #visual_studio

                    
Есть самописная библиотека С++ (.h и .cpp соответственно) использующая библиотеки
OpenCV и boost. 
Заголовочный файл имеет вид:
#include 
#include 
#include 
using namespace boost::numeric::ublas;
и дальше объявления классов и функций (реализованных в cpp)

Использую VS2010, если к проекту "напрямую" подкючать эту библиотеку, прописывать
все необходимые файлы для работы openCV и boost, то все работает.
Пробовал собрать статическую библиотеку lib. Подключаю заголовочный файл подключаю
lib файл к новому проекту и компилятор ругается на неизвестные ему библиотеки:  cv.h
и тп... 
Как можно создать статическую библиотеку, так что бы человеку которому необходимо
написать прогу с использованием самописной библиотеки, не надо было иметь собранные
OpenCV и boost.    


Ответы

Ответ 1



boost::ublas — это header-only library, поэтому к вопросу она отношения не имеет. То есть тому, кто захочет использовать вашу штуковину, нужно будет иметь хэдеры boost'a, и в этом никакой проблемы лично я не вижу. Далее, правильное решение с OpenCV следующее — не нужно embedd'ить весь OpenCV в вашу библиотеку, а нужно поставлять библиотеку as is, а всех пользователей вашей библиотеки отправлять на opencv.org Решение с embedd'ингом плохое, поскольку вы лишаете пользователей вашей библиотеки возможности динамически линковаться с OpenCV и форсируете увеличение размера любого приложения, собранного с применением вашей библиотеки. Также embedd'инг всего OpenCV в вашу библиотеку чреват проблемами с безопасностью. Что должен сделать пользователь вашей библиотеки, в которую статически влинкован OpenCV 2.4.5, если он узнает, что в 2.4.5 нашли exploit, который позволяет получить доступ к любой системе? OpenCV, скажем, выпускает для этого патч-релиз 2.4.6, а ваш пользователь кусает локти. Последний пример, разумеется, сильно притянут за уши, но аргумент вполне себе имеет место быть. Если вы все-таки решите статически embedd'ить OpenCV в вашу библиотеку, то в Visual Studio это можно сделать, например, с помощью приложения LIB. Вам нужно взять файл вашей библиотеки и файл статически собранной библиотеки OpenCV, сдампить из них obj файлы и склеить эти файлы в новую библиотеку, которую и отправлять пользователю.

Ответ 2



Доброго времени суток! На мой взгляд тут два варианта: 1) Собираем библиотеку и компонуем ее со сторонними библиотеками статически, но нашу библиотеку делаем компонуемой динамически + пишем к ней интерфейс убрав все упоминания о заголовочных файлах boost и OpenCV. Пользователю предоставляем нашу библиотеку + наши заголовочные файлы. 2)Собираем библиотеку и компонуем ее со сторонними библиотеками статически, и нашу библиотеку также делаем статической. Затем пользователю Вам необходимо будет предоставить Вашу либу + все заголовки (как Вашей библиотеки, так и сторонних). Других способов нет - по крайней мере они мне не известны

Не получается создать базу данных

#c_sharp #aspnet_mvc #visual_studio

                    
Добрый день.
Проблема описана ниже.
 Выдержка из учебника:
 "... база данных добавляется в проект, и мы можем увидеть ее в папке App_Data. Теперь
в обозревателе баз данных (окно Database Explorer) мы можем подключиться к ней и создать
таблицы, которые будут хранить данные.
 Раскроем узел Creditbook.mdf и найдем узел Tables. Нажмем на этот узел правой кнопкой
мыши и в появившемся меню выберем пункт Add New Table."
У меня нет пункта Add New Table, есть только Обновить и Свойства. (У меня стоят SQL
Server и Management Studio). 
 Вот тут (http://www.sql.ru/forum/1038127/redaktirovanie-bd-v-s), у человека была
такая же проблема, но я всё равно не понял, что нужно делать. 
 Заранее спасибо за помощь.    


Ответы

Ответ 1



Нужно установить SQL Server Data Tools Проверял на Visual Studio 2015.

Ответ 2



Либо зайдите под админом в студию, либо поставьте себе SqlManagementStudio.

Ответ 3



Базу после создания таблицы нужно обновить, тогда вновь созданная таблица станет доступна (кнопка обновления прямо над ID).Обозреватель баз данных после данных действий также обновить желательно (кнопка левый верхний угол). В остальном все правильно работает.

Ответ 4



Для меня решение было таким: в VS жмем Tools->Extensions and Updates, выбрал обновление для VS, дальше надо поставить галочки, подождать пока установится и все заработает. По крайней мере у меня заработало.

Unicode при записи в файл

#windows #unicode #console #visual_studio #cpp

                    
Мне нужно создать консольное приложение, которое 

Считывало бы введённые пользователем символы: как англоязычные, так и русскоязычные.
Выводила бы эти символы на экран в консоль.
Записывала бы эти символы в файл.

С первым и вторым пунктом, как убрать кракозябры, я разобрался следующим образом:


Подключил #include 


Весь вывод стал пропускать через функцию ToRus т.е. cout<< ToRus(L"Почему всё так
сложно!")


Вот сама функция:
char *ToRus(wchar_t *str) {   
static char s[1024];   
CharToOem(LPCWSTR(str), s);    
return s; }

Но осталась проблема 3-м пунктом - с выводом в файл. В файл по-прежнему выводятся
кракозябры. Подскажите, пожалуйста, как решить проблему, как сделать так, чтобы в файл
нормально выводилась? Может вообще, как-то по-другому нужно было делать?    


Ответы

Ответ 1



Нашёл! Вот вам статья: http://www.codeproject.com/Articles/4563/Upgrading-an-STL-based-application-to-use-Unicode. (Не смотрите часть с tstream/TCHAR, вам нужно просто wstream.) Или то же здесь: http://forums.codeguru.com/showthread.php?457106-Unicode-text-file&p=1741409#post1741409. Проблема в том, что обыкновенный wfstream принимает Unicode-строки, а вот пишет их как не-Unicode. Но его можно заставить. Вот вам вкратце описание, как. Первый шаг: создаёте «пустой» конвертер. В обычном случае wchar_t* конвертируется с потерями в обычные символы, но нам надо эту конвертацию отключить. Код конвертера: #include #include #include #include #include typedef std::codecvt null_wcodecvt_base; class null_wcodecvt : public null_wcodecvt_base { public: explicit null_wcodecvt(size_t refs = 0) : null_wcodecvt_base(refs) {} protected: virtual result do_out(mbstate_t&, const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next, char* to, char* to_end, char*& to_next) const { size_t len = (from_end - from) * sizeof(wchar_t); memcpy(to, from, len); from_next = from_end; to_next = to + len; return ok; } virtual result do_in(mbstate_t&, const char* from, const char* from_end, const char*& from_next, wchar_t* to, wchar_t* to_end, wchar_t*& to_next) const { size_t len = (from_end - from); memcpy(to, from, len); from_next = from_end; to_next = to + (len / sizeof(wchar_t)); return ok; } virtual result do_unshift(mbstate_t&, char* to, char*, char*& to_next) const { to_next = to; return noconv; } virtual int do_length(mbstate_t&, const char* from, const char* end, size_t max) const { return (int)((max < (size_t)(end - from)) ? max : (end - from)); } virtual bool do_always_noconv() const throw() { return true; } virtual int do_encoding() const throw() { return sizeof(wchar_t); } virtual int do_max_length() const throw() { return sizeof(wchar_t); } }; Теперь, надо ещё переопределить endl. std::wostream& wendl(std::wostream& out) { out.put(L'\r'); out.put(L'\n'); out.flush(); return out; } А вот и пример использования. Не забудьте про BOM (такая штука в начале файла, может и не понадобиться, если не под Windows). const wchar_t UTF_BOM = 0xfeff; int main() { // заводим файл std::wfstream file; // инстанциируем пустой конвертер null_wcodecvt wcodec(1); std::locale wloc(std::locale::classic(), &wcodec); // сообщаем файлу, что он должен использовать этот конвертер, // а не стандартный. обязательно делаем это _до_ открытия файла file.imbue(wloc); // открыли файл, обязательно как binary, чтобы никакой самодеятельности // от стандартной библиотеки file.open("data.txt", std::ios::out | std::ios::binary); if (!file) { // если текст русский, надо прогнать через `ToRus` std::cerr << "Failed to open data.txt for writing" << std::endl; return 1; } // записали в начало файла BOM file << UTF_BOM; // записали текст file << L"Я тоже не знаю, почему в C/C++ всё так сложно." << wendl; // закрыли файл file.close(); // фсё! return 0; }

суббота, 11 апреля 2020 г.

Сервис не стартует, выдавая ошибку 1053

#cpp #visual_studio #service #visual_studio_2013 #windows_service

                    
Собираю сервис с использованием с++. За основу брал условно-рабочий example, попытки
запустить сервис проводил на нем.
Запускаю код на своей машинее в дебаге/релизе/как обычное приложение/как сервис -
все работает. При попытке запустить данное творение на другой машине как обычное приложение
комп просто не выдает никакого окна. 

В принципе, как понимаю, сервисы и не обязаны отрабатывать как обычные приложения,
поэтому пытаюсь его установить как сервис.(в ком строке от имени админа sc create SERVICENAME
binpath= C:/[---].exe) Устанавливается. Новый процесс появляется в списке сервисов,
при попытке его стартануть (sc start SERVICENAME) комп вежливо отвечает, что 


  the service did not respond to the start or control request in a timely fashion


т е запуск сервиса не модет быть произведен т к сервис не отвечает. 
Как можно с этим справиться?

P.S. вот здесь сырцы полностью.
далее - исходный код самого сервиса

// SimpleService.cpp : Implementation of WinMain

#include "stdafx.h"
#include "resource.h"
#include "SimpleService.h"

class CSimpleServiceModule : public CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >
{
public :
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SIMPLESERVICE, "{01D73C58-D8F4-4A85-B27D-424443739977}")
    HRESULT InitializeSecurity() throw()
    {
        return S_OK;
    }

    HRESULT PreMessageLoop (int nShowCmd);
    void RunMessageLoop (void) throw();
    void OnContinue (void) throw();
    void OnPause (void) throw();
    void OnShutdown (void) throw();
    void OnStop (void) throw();
};

HRESULT CSimpleServiceModule::PreMessageLoop (int nShowCmd) throw()
{
    return CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::PreMessageLoop
(nShowCmd);
}

void CSimpleServiceModule::RunMessageLoop () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::RunMessageLoop ();
}

void CSimpleServiceModule::OnContinue () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::OnContinue ();
}

void CSimpleServiceModule::OnPause () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::OnPause ();
}

void CSimpleServiceModule::OnShutdown () throw()
{
    OnStop ();
}

void CSimpleServiceModule::OnStop () throw()
{
    CAtlServiceModuleT< CSimpleServiceModule, IDS_SERVICENAME >::OnStop ();
}

CSimpleServiceModule _AtlModule;


//
extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, 
                                LPTSTR /*lpCmdLine*/, int nShowCmd)
{
    return _AtlModule.WinMain(nShowCmd);
}

    


Ответы

Ответ 1



Скорее всего у вас на второй машине не установлены рантаймы для C++. Если регистрировать сервис, как сказано в той статье через: SimpleService.exe -service То вы увидите соответствующую ошибку о том, что нет необходимых библиотек.

Подключение GLEW к Visual Studio

#visual_studio #opengl

                    
Пытаюсь подключить GLEW к Visual Studio Express 2013.

Что я сделал:

В настройках указал пути к папкам с дополнительными заголовочными файлами (сделал
папку include и указал путь в настройках проекта) и библиотекам (сделал папку lib и
тоже указал путь).

Положил C:\Users\%User%\Desktop\glew-1.12.0-win32\glew-1.12.0\bin\Release\Win32\glew32
в %Папка с проектом%\Debug. Также в свойствах проекта у меня стоит "Все конфигурации".
Сделал это по инструкции установки GLFW (когда устанавливал GLFW, то в инструкции нужно
было сделать этот шаг).

C:\Users\Andrew\Desktop\glew-1.12.0-win32\glew-1.12.0\include\GL все файлы в %Папка
с проектом%\%Папка с названием проекта%\include.

C:\Users\Andrew\Desktop\glew-1.12.0-win32\glew-1.12.0\lib\Release\Win32 все lib'ы
в %Папка с проектом%\%Папка с названием проекта%\lib.

Также у меня установлен GLFW, но он работает.

Ошибки с GLEW (вставил пример кода с использованием GLFW и GLEW):
    


Ответы

Ответ 1



Если ошибка 0xc0000007b , то попробуй скомпилировать в режиме Release, а не Debug : http://www.cyberforum.ru/visual-cpp/thread845225.html Если это сработает, то можно в Debug исправить опцию на Project -> Properties -> C/C++ -> Code Generation -> Runtime Library : Multi-threaded DLL (/MD) . После этого у меня заработал и Debug режим. Только сперва удали созданные папки Debug в папке проекта и построй приложения заново уже с новыми настройками.

Ответ 2



Для подключения GLEW(x64) нужно сделать следующее: glew32.lib, glew32s.lib положить сюда: C:\Program Files (x86)\%VS FOLDER%\VC\lib\amd64 glew.h, glxew.h, wglew.h положить сюда: C:\Program Files (x86)\%VS FOLDER%\VC\include\GL glew32.dll положить сюда: C:\Windows\System32 Далее выбрать нужный проект, нажать правой кнопкой мышки, выбрать Properties-> Configuration Properties -> Linker -> Input -> Additional Depencecies. В текстовое окно вписать glew32.lib. Важно! Конфигурация солюшена должна быть x64.

Ошибка при прохождении сертификата Windows Store

#c_sharp #visual_studio #build #windows_phone_8 #microsoft_store

                    
В общем, пытаюсь сделать appx файл через VS. После компиляции пытаюсь пройти сертификацию,
валится на таком:

Проверка конфигурации отладки

ОШИБКА
Конфигурация отладки
Обнаружена ошибка: При тестировании конфигурации отладки обнаружены следующие ошибки:
Построение двоичного файла FFF.exe выполнено в режиме отладки.
Последствия, если проблема не устранена: Магазин Windows Phone не разрешает отлаженные
версии приложений.
Инструкции по исправлению: Убедитесь, что приложение не связано с отлаженными версиями
платформы и создано на основе конфигурации выпуска.


Суть в чем, Release мод стоит:

Что вообще VS хочет от меня?
    


Ответы

Ответ 1



В общем, проблема была в том что в одном из двух проектов не была выставлена галочка: Optimize code. Пруф на English SO.

четверг, 9 апреля 2020 г.

MonthCalendar реагирует на “пустые ячейки”

#c_sharp #visual_studio #winforms #calendar

                    




В visual studio есть стандартный контрол MonthCalendar.
По умолчанию контрол выглядит как на левой части картинки. 
На нем видно числа следующего месяца и их можно выделить и контрол переместится на
новый месяц.

Если в контроле установить calendar dimension равный 1,2 то контрол примет  вид как
на правой части картинки. Будет видно сразу два месяца. Но если начать выделять, то
происходит нелепица как показано на видео или в гифке. 

Происходит это потому что в пустых "ячейках" календаря есть дни следующего месяца,
но их не видно, т.к. следующий месяц показан полностью из-за calendar dimension. 

Как сделать так чтоб контрол не реагировал на пустых "ячейках", в которых есть данные
о следующем месяце, но их не видно?
    


Ответы

Ответ 1



С этим ничего сделать нельзя. MonthCalendar — это обёртка над системным элементом управления SysMonthCal32. Сам класс никакой особой логики не содержит, поведение реализовано на уровне операционной системы. А вот операционная система настолько глючная, что выделение так странно работает. Или, может быть, кто-то счёл, что это не баг а фича. Так или иначе, это норма. Вероятно, про этот элемент управления забыли давно и основательно. Сейчас модно использовать WPF, UWP и т. п., а WinForms — это легаси.

Работа с БД Access в Visual Studio 2015. Создание многопользовательской БД

#c_sharp #база_данных #visual_studio #access

                    
Имею БД Access и прогу на C# работающую с ней. Пока все тестил в монопользовательском
режиме. Но сама программа должна выполнять роль клиентского приложения для офиса кадастрового
управления, и поэтому имеет место много пользовательское обращение к одной БД. Как
избежать проблем с одновременными подключениями нескольких пользователей, обращение
к одним данным, ведь явно будет ужасная потеря целостности.
    


Ответы

Ответ 1



Потери целостности, по крайней мере на уровне базы, не будет - Аccess это все-таки база данных, и она обеспечивает целостность всех данных, включая внешние ключи. И да, она полноценно поддерживает транзакции. Т.е. при работе из .NET она практически ничем не отличается от SQL Server, кроме строки соединения. Но вам придется пересмотреть ваш код на предмет предположений, которые могут быть ложными в случае одновременной работы нескольких пользователей - например, если пользователи будут активно удалять данные - то стоит аккуратно обрабатывать случаи открытия их для отображения. Единственная реальная проблема с Access - это ограничение на 10 одновременных подключений. Что может стать очень серъезной проблемой при найме 11-го сотрудника :)

Ответ 2



Из вопроса не совсем понятно, как вы собираетесь обеспечивать многопользовательский режим -- то ли это трёхзвенное приложение (т.е. есть middle layer в виде application server), то ли просто клиент-сервер. Предполагаю второе. Но в случае с MS Access тут особая ситуация -- фактически это файл-сервер. Я в своё время учавствовал в создании приложений, которые используют таким образом .mdb базу. База выкладывается на файловую шару, при подключении с клиента указывается путь к файлу на шаре, естественно, у всех участников должны быть права как на шару, так и на файл. Jet-драйвер корректно обрабатывает блокировки при одновременном доступе к таблицам, тут проблем нет. Но из-за того что это файл-сервер, производительность может проседать. За чем стоит следить: Размер базы. Если я правильно помню, есть верхний предел размера файла -- кажется, 2 ГБ. Соответственно, ничего пожирающего место, такое как документы в виде полей итп хранить в базе не стоит. Старые данные после удаления остаются в файле базы -- видимо, для ускорения операции удаления. Поэтому, время от времени нужно выполнять чистку базы (Compact/Repair). Для этой операции нужен монопольный доступ к файлу базы. Про не более 10 подключений -- https://support.microsoft.com/en-us/kb/154869 -- это только для 1.1, 2.0, 2.5; для Jet 3.0 уже можно больше. Но ещё может быть ограничение на количество подключений к шаре. Но в любом случае, надо понимать, что файловая БД -- это только для небольших задач и малого числа пользователей.

вторник, 31 марта 2020 г.

Не является приложением Win32

#cpp #windows #visual_studio


Такое дело, скомпилировал программу в на релиз x86 решил проверить на старом компьютере
выводится сообщение "Не является приложением win32" когда компилировал под x86. Из
сторонних библиотек подключил только SFMLx86 из либов следующие

opengl32.lib
winmm.lib
gdi32.lib
freetype.lib
sfml-main.lib
jpeg.lib
sfml-graphics-s.lib
sfml-window-s.lib
sfml-system-s.lib
sfml-audio-s.lib


На моем компьютере все работает, даже пробовал вынести в отдельную папку. В чем дело?
    


Ответы

Ответ 1



Данная "проблема" появилась с первых версий MS Visual Studio 2012 (а так же, встречается во всех последующих версиях, 2013, 2015, 2017), и связана с отказом от поддержки устаревшего Windows XP. (Чем конкретно это обоснованно - неизвестно) В то же время, в первый месяц компанию засыпали гневными отзывами о том что программисты больше не могут собирать свои проекты под данную операционную систему. Тогда же, компания выпустила обновление, которое отдельным набором инструментов для платформы позволяла собрать работающую программу под XP. Зайдите в свойства проекта, и убедитесь что целевая платформа с постфиксом "_xp": По умолчанию, при установке студии 2012 (или старше), вам так же должны были предлагать установить обновление для компиляции под целевую платформу Windows XP Если же вы проигнорировали этот пункт, есть возможность поставить обновление, которое добавит в вашу студию сборку под Windows XP. Ссылка на подобный вопрос на англоязычной версии stackoverflow

воскресенье, 29 марта 2020 г.

Как писать на C в Visual Studio 2017?

#c #visual_studio


Как установить язык C в Visual Studio 2017?
Нужен именно C, а не C++ или C#. При установке просто нет обычного C.


    


Ответы

Ответ 1



Компиляцией С и С++ в студии занимается один и тот же компилятор. Файлы с расширением .c автоматически компилируются как С код. Также это можно задать вручную посредством параметра /TC

Ответ 2



Если хочется писать на чистом си, при этом не особо хочется устанавливать большие пакеты студии, можно воспользоваться компилятором+IDE Pelles C - маленький, легенький, поддерживает с99, можно писать консольные и оконные приложения.

пятница, 13 марта 2020 г.

Что делать с файлом имяпроекта.v12.suo GIT

#c_sharp #visual_studio #git #visual_studio_2013 #git_commit


У меня есть проект, я его закомитил и создал новую ветку потом поработал в ней и
закомитил ещё раз чтоб вернуться в основную ветку. Потом вернулся в основную ветку,
в VS попросило нажать reload я жму, и потом пишу git status. Мне показывает что мой
файл имяпроекта.v12.suo modified. Тоже самое происходит когда я возвращаюсь обратно
в новую ветку, опять имяпроекта.v12.suo modified, тоесть чтоб переключаться между ветками
мне приходится дополнять коммит git commit --amend. Что с этим делать?
    


Ответы

Ответ 1



Добавьте *.suo в .gitignore. Файлы .suo содержат состояние открытых панелей Visual Studio и тому подобные вещи, интересные только на локальной машине. В репозитории им не место. Вот большой список того, что должно быть в .gitignore для проектов под Visual Studio: https://www.gitignore.io/api/visualstudio

Включение простой базы данных в проект для работы через запросы (SqlConnection, SqlCommand)

#c_sharp #sql #база_данных #visual_studio #sql_server


Visual Studio 2016.
Я пока умею работать с базой данных только так: создаю базу данных в (localDb)\Projects,
генерю таблицы из файла со скриптом sql, потом вытаскиваю или записываю данные с помощью
SqlCommand.
А включается ли она в проект, чтобы программа работала на другом компе? У меня что-то
сомнения возникли.


Если не включается, то объясните пожалуйста на пальцах для такого дубины, как я -
возможно ли создать локальную БД внутри проекта, чтобы можно было с ней точно также
работать запросами?
Если тыкнуть "Создать элемент", есть три варианта, "БД, основанная на службах", "Локальная
БД", "Набор данных". Каждый из вариантов предполагает кучу разных настроек, которые
мне по-моему нафиг не сдались. Думал, раз мне нужна локальная база, то вариант "Локальная
БД" - самый логичный. Но не так всё просто.Глянул "Набор данных" - сходу увидел, что
там не запросы, и закрыл. Если выбрать локальную, то там еще 2 варианта - "Набор данных",
"Модель данных EDM". То, что здесь опять есть набор данных - сбивает меня с толку.
Модель данных у меня долго создавалась, но там надо собственно рисовать модель, что
мне не нужно.
Короче, я что-то ни фига не понял, помогите пожалуйста дураку.


    


Ответы

Ответ 1



Создаем проект; Источники данных - Добавить новый источник данных; База данных - Набор данных - Создать подключение, вводим имя файла базы данных. (Использовать аутентификацию Windows). Отмечаем галочкой Да, сохранить подключение как - Готово; Вот у вас есть пустая локальная база данных подключенная к вашему приложению. При компиляции файл вашей бд будет скопирован в папку с вашей программой. В Обозревателе баз данных появляется ваша база данных. Выбираете ее, нажимаете правой кнопкой мыши, в меню выбираете Новый запрос. Там выполняете ваш sql скрипт по созданию структуры базы. Либо сами ручками, открываете подпапку Таблицы, Хранимые процедуры, Представления и т.п. и там создаете все что необходимо. После этого в Источнике данных выбираете: Настроить источник данных с помощью мастера, там будет показана ваша бд. Отмечаете галочками необходимые таблицы, которые вам нужны в программе. После они появляются в виде дерева в источнике данных. Можно взять любую таблицу или отдельный ее столбец и перетянуть на форму. При этом автоматом создастся подключение необходимых компонентов для отображения данных.

воскресенье, 8 марта 2020 г.

server и client code в разных проектах, но в одном решении

#javascript #visual_studio #aspnet


Хочется сделать так чтобы в одном решении было два проекта, один asp.net webapi,
а другой просто html страница с набором js скриптов и чтобы при нажатии f5 все это
запускалось вместе, а в браузере открывалась html страница.Как это реализовать в visual
studio?
    


Ответы

Ответ 1



В Visual Studio вызвать контекстное меню у Solution, выбрать Add | Existing Web Site... Выбрать каталог с файлами сайта. Вызвать контекстное меню у Solution, выбрать Properties. В появившемся диалоге выбрать Common Properties | Startup Project. Выбрать Multiple startup projects. Для WebApi выбрать Action Start, для сайта - Start without debugging. Чтобы в браузере не открывалась страница для WebApi приложения, нужно вызвать контекстное меню у проекта WebApi. Выбрать Properties. Вкладка Web. Start Action -> Don't open a page. Wait from a request an external application.

суббота, 7 марта 2020 г.

Можно ли в Visual Studio собирать проект на лету?

#visual_studio #aspnet_mvc #iis


При компиляции и запуске проекта ASP.NET MVC Core часть .cs файлов блокируется студией
и что б изменить код- надо "выключать сборку", изменять код, заново компилировать и
запускать изменённый проект, затрачивая время. 

Можно ли на лету после изменения .cs файла собрать проект и тут же увидеть в браузере
обновлённые данные, не перезапуская весь IIS ?
    


Ответы

Ответ 1



Можно, если использовать компьютер в качестве локального веб-сервера. Не путать с IIS Express, который открывает Visual Studio при запуске проекта. Следует заметить что компонент IIS включен как часть установки Windows как для сервера, так и для рабочих машин. Каждая версия OS Windows предлагает свою версию IIS: Windows 8 - IIS 8, Windows 7 - IIS 7/7.5 Чтобы установить его, необходимо выполнить следующие действия: Открыть панель управления Открыть "Программы" Открыть "Включение или отключение компонентов Windows". Выбрать Internet Information Services (Службы IIS) Убедитесь, что вы выбрали поддержку ASP.NET. Для этого раскройте узел Службы Интернета --> Компоненты разработки приложений --> ASP.NET (Internet Information Services --> World Wide Web Services --> Application Development Features --> ASP.NET) Если вы хотите использовать поддержку IIS в Visual Studio, которая позволяет вам создавать виртуальные каталоги IIS непосредственно в диалоговом окне New Web Site, вам нужно выбрать пункт «Совместимость управления IIS 6» в разделе «Средства управления веб-сайтом» (Web Management Tools --> IIS 6 Management Compatibility). Ok Убедитесь, что IIS активен: открыть localhost:80 в браузере. Ниже показана стандартная страница. Установить SQL Server и разрешить подключения Открыть Visual Studio с права администратора и создать виртуальный каталог для приложения: ПКМ по проекту --> Свойства --> Веб --> В разделе серверы выбрать "Локальный IIS" --> Нажать "Создать виртуальный каталог". Проект будет доступен по адресу указанному в графе URL-адрес проекта После написания кода собираем проект Ctrl+Shift+B и перезагружаем страницу в браузере. Для отладки Запускаем Visual Studio с правами администратора Жмем кнопку присоединиться (вверху на панельке, зеленая) Ставим галочку на "Показать процессы, запущенные всеми пользователями" Ищем процесс с названием "w3wp.exe" Жмем "Присоединиться"

среда, 4 марта 2020 г.

Программное добавление ключа в App.config

#c_sharp #visual_studio


Создал свою секцию в файле конфигов, могу править значения в существующих строках,
но не получается удалять и добавлять строки. Мой код:

Сам конфиг:





   
Файл с классом моей секции: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; namespace project { class CircuitsConfigSection : ConfigurationSection { [ConfigurationProperty( "Circuits" )] public CircuitsCollection CircuitItems { get { return ((CircuitsCollection)(base["Circuits"])); } set { base["Circuits"] = value; } } } [ConfigurationCollection(typeof(CircuitElement))] public class CircuitsCollection : ConfigurationElementCollection { protected override ConfigurationElement CreateNewElement() { return new CircuitElement(); } protected override object GetElementKey(ConfigurationElement element) { return ((CircuitElement)(element)).CircuitName; } public CircuitElement this[int idx] { get { return (CircuitElement)BaseGet(idx); } } } public class CircuitElement : ConfigurationElement { [ConfigurationProperty("circuitName", DefaultValue = "", IsKey = true, IsRequired = true)] public string CircuitName { get { return ((string)(base["circuitName"])); } set { base["circuitName"] = value; } } [ConfigurationProperty("connectionStringOut", DefaultValue = "", IsKey = false, IsRequired = false)] public string ConnectionStringOut { get { return ((string)(base["connectionStringOut"])); } set { base["connectionStringOut"] = value; } } [ConfigurationProperty("connectionStringIn", DefaultValue = "", IsKey = false, IsRequired = false)] public string ConnectionStringIn { get { return ((string)(base["connectionStringIn"])); } set { base["connectionStringIn"] = value; } } } } Обработчик клика, где я обращаюсь к конфигу, пытаясь его изменить: private void saveBtn_Click(object sender, EventArgs e) { Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); CircuitsConfigSection section = (CircuitsConfigSection)cfg.Sections["CircuitsSection"]; if (section != null) { for (int i = 0; i < circuitSettings.Count; i++) { section.CircuitItems[i].CircuitName = circuitSettings[i].Name; section.CircuitItems[i].ConnectionStringOut = circuitSettings[i].GetConnString(true); section.CircuitItems[i].ConnectionStringIn = circuitSettings[i].GetConnString(false); } cfg.Save(); ConfigurationManager.RefreshSection("CircuitsSection"); } else System.Diagnostics.Debug.WriteLine("Секция не найдена"); this.Close(); } Понятное дело, что если в circuitSettings хранится больше объектов, чем уже есть в конфиге (section.CircuitItems), то будет вылет за пределы диапазона в счетчике. Но беда в том, что нельзя задать что-то вроде section.CircuitItems.add(new Item()) Как быть? Как задать больше или меньше существующих элементов? Или вообще отдельно сформированный список присвоить? Сейчас я не вижу доступных команд на изменение длинны списка ключей.


Ответы

Ответ 1



Так добавьте нужный метод в CircuitsCollection: public void Add(CircuitElement element) { BaseAdd(element); }

Как узнать какая версия nuget установлена?

#c_sharp #visual_studio #nuget


Как узнать какая версия nuget установлена?
Если просто ввести:

PM> Get-Package -ListAvailable


то это может быть версией?

NuGet.Core   {2.14.0}    NuGet.Core is the core framework assembly for NuGet that
the rest of NuGet builds upon.                                                    
                                          

    


Ответы

Ответ 1



То, что у вас в вопросе, это версия библиотеки, которая используется Nuget менеджером. Версия же самого менеджера отображается в консоли: Package Manager Console Host Version 3.4.4.1321 А также в Tools -> Extensions and Updates:

воскресенье, 1 марта 2020 г.

Как лучше всего проверить, что окно существует?

#c_sharp #windows #visual_studio #winapi


Допустим, я пишу функцию, которая по значению дескриптора должна вернуть логическое
значение, существует ли окно с таким дескриптором. Я представляю огромное количество
реализаций - от перебора всех окон через GetProcesses или EnumWindow и до вызова какой-нибудь
функции, принимающей hwnd, и возвращающую результат. А может я все усложняю, а такая
функция входит в user32. В общем, как будет лучше и быстрее?
    


Ответы

Ответ 1



Есть WinApi функция IsWindow, но как пишут в этом ответе хендл может переназначаться => если вы пасете определенное окно и хотите проверить его существование, то окно может быть уже закрыто, но хендл с таким же номером был создан для другого окна. [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool IsWindow(IntPtr hWnd); Получается, что имеет смысл воспользоваться вот этой функцией, если у окна есть специфическое название GetWindowText , она вернет Caption окна и можно удостоверится, что именно желаемое окно живо. Через WinApi я думаю, что быстрее. Что лучше? Все зависит от того, как часто вы это собираетесь делать. Если не часто, то я бы не заморачивался и выполнял итерацию по процессам.

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

Как подключиться к github из visual studio?

#visual_studio #git #github


В Visual Studio уже встроен Git.
Везде пишут только как скачать уже имеющийся удалённый репозиторий с git hub'а, но
нигде, как подключиться к гитхаб аккаунту из visual studio
Итак, у меня есть аккаунт на guthub, я создал приложение на локальном компе. Как
мне через visual studio без доп плагинов подключиться к своему аккаунту, создать новый
репозиторий и запушить папку с проектом в него?
    


Ответы

Ответ 1



Открыть Team Explorer (View - Team Explorer), затем кликните по иконке штепселя (Manage Connection): Более подробное описание в документации PS Ещё в меню View - Other Windows есть пункт Github, но я им не пользовался, так как гитхабом не пользуюсь так как мне приходится чаще с tfs работать.

Ответ 2



Для GitLab и Githab, как подключиться из VS к удаленному аккаунту и добавить локальный проект в новый пустой репозиторий. 1) Сначала на gitlab.com создаем новый проект с названием, соответствующим локальному проекту. На Github так же, только Репозиторий. 2) В Visual Studio в проекте нажимаем внизу окна кнопку «Добавить в систему управления версиями»=> git. 3) В разделе "Отправить в удаленный репозиторий" вводим URL-адрес созданного на сайте репозитория проекта, нажимаем Опубликовать. Проект должен загрузиться на сайт.

вторник, 25 февраля 2020 г.

Как подключиться к интернет через iexplore?

#c_sharp #windows #visual_studio


Делаю проект Windows Forms приложения на Visual Studio 2010. Программа работает со
службой WCF опубликованной в интернете. Т.е. для нормальной работы этого приложения,
нужно активное соединение с интернет.  

Сейчас нормальная работа возможна, только, если есть прямое подключение компьютера
к интернет. Обычно в программах бывают настройки подключения к интернет: прокси-сервер,
как у браузера. Например, некоторые программы используют настройки iexplore, отображается
диалог авторизации на сервере.

Как я могу реализовать тоже самое в своем приложении, настрйки подключение к интернет?
Не важно, на чем и какой проект приложения, лишь бы можно было добавлять ссылки на
службы WCF и работать с ними.  

UPD

Остался вопрос: как подключиться к интернет используя настройки iexplore?
    


Ответы

Ответ 1



Добавить настройки прокси в приложение можно в конфиге, например так: UPD: Про диалог браузера ничего не могу сказать, но программно устанавливать прокси можно, как в этом примере с МСДН.