Как добавить файл в Visual Studio без подтверждения Reload?

Инструменты для разработки

Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение i-programmer 21 июн 2016, 21:53

Сейчас если открыта студия и в Юнити создаем файл (Create -> C# Script), то студия хочет, чтоб выбрал одно из действий Reload/ReloadAll/Ignore/IgnoreAll

Изображение

А можно ли как-то что-то где-то подкрутить, чтоб сразу автоматом без подтверждения файл подключался к проекту, как ReloadAll например и не доставал?

Аналогично при удалении файла из Юнити.
i-programmer
UNец
 
Сообщения: 16
Зарегистрирован: 31 мар 2015, 18:32


Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение i-programmer 23 июн 2016, 00:37

Anonymyx писал(а):http://forum.unity3d.com/threads/how-to-disable-visual-studio-dialog-file-modification-detected.364919/



Печально, с января никаких уведомлений о прогрессе. Видимо и правда тяжко это сделать. Или до этого еще не дошёл таск)
i-programmer
UNец
 
Сообщения: 16
Зарегистрирован: 31 мар 2015, 18:32

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение DbIMok 23 июн 2016, 00:58

положить в Editor папку файлик FileModDialogCloser.cs
Синтаксис:
Используется csharp
using System;
using System.Runtime.InteropServices;
using UnityEditor;

[InitializeOnLoad]
public class FileModDialogCloser {

        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

        const string search = "File Modification Detected";
        static IntPtr hwnd;

        static void Check() {
                hwnd = FindWindowByCaption(IntPtr.Zero, search);
                if ((int)hwnd != 0) {
                        ShowWindow(hwnd, 5);
                        keybd_event(0x09, 0, 0, 0);
                        keybd_event(0x0D, 0, 0, 0);
                }
        }

        static FileModDialogCloser() {
                EditorApplication.update += Check;
        }
}
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.5k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение i-programmer 23 июн 2016, 08:29

DbIMok писал(а):положить в Editor папку файлик FileModDialogCloser.cs
Синтаксис:
Используется csharp
using System;
using System.Runtime.InteropServices;
using UnityEditor;

[InitializeOnLoad]
public class FileModDialogCloser : EditorWindow {

        [DllImport("user32.dll")]
        static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

        const string search = "File Modification Detected";
        const byte VK_RETURN = 0x0D;
        const uint KEYEVENTF_KEYUP = 0x0002;
        IntPtr hwnd;

        void Check() {
                hwnd = FindWindowByCaption(IntPtr.Zero, search);
                if ((int)hwnd != 0) {
                        ShowWindow(hwnd, 5);
                        keybd_event(VK_RETURN, 0, 0, 0);
                        keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
                }
        }

        void Update() {
                Check();
        }
}



Это что-то не то. Во всяком случае оно не триггерит закрытие окна и эмуляцию нажатия на одну из кнопок. Все равно окно всплывает и надо нажать.
i-programmer
UNец
 
Сообщения: 16
Зарегистрирован: 31 мар 2015, 18:32

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение DbIMok 23 июн 2016, 14:36

обновил скрипт
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.5k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение Zaicheg 23 июн 2016, 15:55

Сходу без вникания не помогло.
Unity 5.3.4f1 (Target: WebPlayer), VS 2015, Windows 10 Ru
Сменить значение строки search под язык системы пробовал
http://screencast.com/t/51CYZYey3fD
http://screencast.com/t/AWGJuljB5
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение DbIMok 23 июн 2016, 16:41

русской студии нет под рукой. пробовал на "Безымянный — Блокнот" - работает
Unity 5.4.0b22, Windows 10 Ru
попробуй [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true, CharSet = CharSet.Auto)]
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.5k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение i-programmer 23 июн 2016, 18:51

DbIMok писал(а):обновил скрипт


Работает!
Жаль конечно, что нельзя вообще как-то обойтись без показа окна. Оно быстро конечно убирается, но, как я понимаю, это максимум что можно выжать из этого дела. Остальное - ждать разрабов VS for Unity

И, как я понимаю, чтоб сделать не Reload, а, например ReoladAll достаточно сделать не keybd_event(0x0D, 0, 0, 0);
а вот так keybd_event(0x09, 0, 0, 0); keybd_event(0x0D, 0, 0, 0); ? Типа Нажал на Tab и Enter. (и для игнора тоже табы)

Спасибо, Уважаемый. :ymapplause:
i-programmer
UNец
 
Сообщения: 16
Зарегистрирован: 31 мар 2015, 18:32

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение eonyanov 29 сен 2016, 21:45

А у меня вообще не вылазит окошко никакое, когда я создаю новый скрипт. :-?
И приходится его вручную импортировать.
Когда удаляю скрипт в Юнити, тоже в VS2015 ничего не происходит.
Как с этим бороться?
Заходил в настройки, галочка "Detect when file is changed ...." стоит.
Может у меня неправильная студия? Community 2015 какая-то...
Glow Asteroids Game
Happy Chair
Аватара пользователя
eonyanov
UNITрон
 
Сообщения: 298
Зарегистрирован: 22 авг 2014, 10:28

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение DbIMok 11 май 2017, 05:51

Диалог не должен появляться, если создавать файл в VS. У юнити следилки много недостатков: нужно держать этот скрипт в каждом проекте, постоянно впустую проверяет, ищет по всем окнам, если запущено несколько экземпляров юнити редактора с таким скриптом и студия тормозит, может навставлять Enter'ов в код. Поэтому я закодил небольшой extension для Visual Studio 2017 FMDKiller.vsix. Принцип действия тот же. Увы, судя по подобным решениям (DPStudio VSCommands) более подходящего механизма обхода в студии не предусмотрено. Если кому-то надо расширение для предыдущих версий VS, то ниже есть код. Достаточно создать расширение из шаблона (закачав SDK для студии), скопипастить код, заменив если нужно неймспейс, имя класса и PackageGuidString на свои и сделать билд.
Синтаксис:
Используется csharp
using System;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;

namespace FMDKiller {
        // auto generated set of attributes
        [PackageRegistration(UseManagedResourcesOnly = true)]
        [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
        [ProvideAutoLoad(UIContextGuids80.SolutionExists)]      // auto start when solution load
        [Guid(PackageGuidString)]
        [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1650:ElementDocumentationMustBeSpelledCorrectly", Justification = "pkgdef, VS and vsixmanifest are valid VS terms")]
        public sealed class FMDKiller : Package {
                // auto generated, replace with your own value
                public const string PackageGuidString = "ca6f249c-847b-4acb-baaf-09c31e3b6546";

                #region Import WinAPI

                [DllImport("user32.dll", EntryPoint = "SetWindowsHookEx", SetLastError = true)]
                static extern IntPtr SetWindowsHookEx(int hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId);

                [DllImport("kernel32.dll", EntryPoint = "GetCurrentThreadId")]
                static extern uint GetCurrentThreadId();

                [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "GetClassName", SetLastError = true)]
                static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);

                [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "GetWindowTextLength")]
                static extern int GetWindowTextLength(HandleRef hWnd);

                [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "GetWindowText")]
                static extern int GetWindowText(HandleRef hWnd, StringBuilder lpString, int nMaxCount);

                [DllImport("user32.dll", EntryPoint = "CallNextHookEx")]
                static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

                [DllImport("user32.dll", EntryPoint = "UnhookWindowsHookEx", SetLastError = true)]
                [return: MarshalAs(UnmanagedType.Bool)]
                public static extern bool UnhookWindowsHookEx(IntPtr hhk);

                [DllImport("user32.dll")]
                static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

                [DllImport("user32.dll")]
                static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

                #pragma warning disable 0649
                struct CWPSTRUCT {
                        public IntPtr wParam;
                        public IntPtr lParam;
                        public int msg;
                        public IntPtr hwnd;
                }
                #pragma warning restore 0649

                #endregion

                delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam);

                private const int WH_CALLWNDPROC = 4;

                private const int SHOW = 5;

                private const byte TAB = 0x09;

                private const byte RETURN = 0x0D;

                private const string DIALOG_BOX = "#32770";

                private static IntPtr hookPtr = IntPtr.Zero;

                private static HookProc hookProc;

                public FMDKiller() { }

                protected override void Initialize() {
                        base.Initialize();
                        ThreadHelper.Generic.Invoke(() => {
                                hookProc = HookProcImpl;
                                hookPtr = SetWindowsHookEx(WH_CALLWNDPROC, hookProc, IntPtr.Zero, GetCurrentThreadId());
                        });
                }

                private IntPtr HookProcImpl(int code, IntPtr wParam, IntPtr lParam) {
                        try {
                                if (code >= 0) {
                                        CWPSTRUCT w = (CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPSTRUCT));
                                        if (w.msg == 1) {
                                                StringBuilder stringBuilder = new StringBuilder(128);
                                                int num = GetClassName(w.hwnd, stringBuilder, stringBuilder.Capacity);
                                                if (num != 0 && stringBuilder.ToString() == DIALOG_BOX) {
                                                        int capacity = GetWindowTextLength(new HandleRef(this, w.hwnd)) * 2;
                                                        StringBuilder stringBuilder2 = new StringBuilder(capacity);
                                                        GetWindowText(new HandleRef(this, w.hwnd), stringBuilder2, stringBuilder2.Capacity);
                                                        string caption = stringBuilder2.ToString();
                                                        if (caption == "File Modification Detected" ||
                                                            caption == "Обнаружено изменение в файле") {
                                                                ShowWindow(w.hwnd, SHOW);
                                                                keybd_event(TAB, 0, 0, 0);
                                                                keybd_event(RETURN, 0, 0, 0);
                                                        }
                                                }
                                        }
                                }
                        } catch (Exception e) {
                                Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Exception: {0}", e.Message), "FMDKiller");
                        }
                        GC.KeepAlive(this);
                        return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
                }

                protected override void Dispose(bool disposing) {
                        if (hookPtr != IntPtr.Zero) {
                                UnhookWindowsHookEx(hookPtr);
                        }
                        base.Dispose(disposing);
                }
        }
}
 
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.5k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение Zaicheg 11 май 2017, 11:24

Спасибо )
На всякий случай, в русской 2017-студии окно выглядит так: https://www.screencast.com/t/sufDDuPHj3Q
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение wmadwand 26 окт 2017, 14:45

Спасибо, отрабатывает на ура! :-bd
Перевел для VS2015: https://bitbucket.org/wmadwand/fmdkillervs2015/src

FMDKiller_VS2015_Ext/FMDKiller_VS2015.vsix - файл расширения для установки
FMDKiller_VS2015 - исходники VS-проекта
Аватара пользователя
wmadwand
UNец
 
Сообщения: 2
Зарегистрирован: 11 июл 2014, 21:22
Skype: wmadwand

Re: Как добавить файл в Visual Studio без подтверждения Reload?

Сообщение DbIMok 02 мар 2018, 19:10

UnityVS научился автосинхронизировать солюшен, так что теперь ничего кроме него не нужно
3.5.0.2
Выпущено 04.12.2017
Новые функции
Интеграция:
Проекты Unity теперь автоматически повторно загружаются в Visual Studio при добавлении или удалении скриптов Unity.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.5k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05


Вернуться в Инструментарий

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1