웹 개발이라 하면 장점은 통일된 클라이언트 환경에서 서비스를 제공함을 들 수 있다.

그렇기에 프로그램의 많은 부분이 클라이언트나 (OS에서 구동되는) 프로그램으로도 구현이 가능함에 불구하고, 웹으로 구현된 프로그램이 많다.

 

공학이론에서 배운 중앙집중시스템에 대한 관점에서 보더라도 반복적으로 쓰이는 중심 기능들은 집중화된 서버에서 이루어져 함에 관리 및 개발이 용이함을 알 수 있다. 

최근에는 윈도우의 버전이 통합됨에 따라 호환성의 많은 부분이 해결되었다고 볼 수 있지만 그 외의 운영체제를 사용하는 사용자 수는 결코 작지 않다.

 

익스플로러가 제공하는 다양한 기능에는 사용자들이 접해보지 못한 기능들이 많이 존재한다.

그러한 기능들을 이용자들에게 하여금 보여줄 수 없는 이유는, 지금의 웹환경 생태가 브라우저 호환성을 요구하고 있다는 점이다. 또한, 이러한 최신 기능 트랜드들을 선두할 주체가 없다는 점이다.

 

그렇기에 오래전에 발표된 익스플로러의 기능들이 있음에, 이를 이용하기 보다는 웹서버를 사용하곤 한다. 하지만 이는 결코 단순한 부분이 아니다. 사용자 입장에서는 클라이언트, 즉 보이는 부분에만 민감하고 어떤 기능이 되고 안되고만을 느끼기에 기술적인 어려움을 느끼기 힘들다.

 

브라우저 호환성을 갖추기 위하여 최근의 트랜드는 웹서버와 웹클라이언트 간의 소통이 가능한 구조로 개발을 진행하는 중에 있다. 글쓴이는 이러한 부분에 있어서 경험이 적은 데 그 부분이 아쉽다. (아에 없는 않다. 하지만 상용화된 서비스에 이러한 기술을 적용한 실무진들이 부러울 따름...)

 

이 기능, 저 기능 안된다고 불만을 표하는 것은 좋으나, 개발이 쉽지 않은 부분을 이해해주었으면 한다. 보통의 프로그램으로 가능한 역할 (흔히 쓰는 유틸, 컨텐츠 뷰어) 등을 웹으로 구현하려면 3배 이상의 노력이 수고됨이 일반 독자들에게 말하고 싶은 점이다. 더군다나, 요즘의 새로 나온 트랜드라... 개발자끼리의 자료 공유나 리소스를 찾기 어려운 점도 그러한 이유다.

 

호환성이라는 놈은 결코 만만한 녀석이 아닌 것이다.

I have created a website in ASP.NET and have created a class and put it inside of the App_Code folder. However I cannot access this from my other pages. Does something need to be configured to allow this? I have made it work in previous projects, but not in this one, somehow.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
up vote527down voteaccepted
+100

Right click on the .cs file in the App_Code folder and check its properties.

Make sure the "Build Action" is set to "Compile".






그림 그리는 개발자 __ 메모리 덤프(Memory dump) 분석하기 2.pdf

그림 그리는 개발자 __ 메모리 덤프(Memory dump) 분석하기 1.pdf


출처: http://imagej.tistory.com/153




[Qt5] 32비트에서 64비트로 프로젝트 변경하기 - 나긋한 개발.pdf


제목: Microsoft SQL Server Management Studio

------------------------------


서버 '[컴퓨터 이름]'에 대한 데이터베이스 연결이(가) 실패했습니다.  (Microsoft.SqlServer.Smo)


도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600.1+((KJ_RTM).100402-1539+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=데이터베이스+연결+Server&LinkId=20476


------------------------------

추가 정보:


Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다. (Microsoft.SqlServer.ConnectionInfo)


------------------------------


데이터베이스 '[DB명]'은(는) 해당 버전이 706이므로 열 수 없습니다. 이 서버는 버전 661 및 이전 버전을 지원합니다. 다운그레이드 경로는 지원되지 않습니다.

새 데이터베이스 '[DB명]'을(를) 열 수 없습니다. CREATE DATABASE가 중단됩니다. (Microsoft SQL Server, 오류: 948)


도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=948&LinkId=20476


------------------------------



서버쪽은 64비트 SQL Server 2012 R2 가 설치되어 있고 프로그램에서 MST 라는 DB를 생성하여 데이터 압축 후 SQL Express 2008 사용하는 PC 에서 DB 연결하려고 할때 


"데이터베이스 'MST'은(는) 해당 버전이 706이므로 열 수 없습니다. 이 서버는 버전 661 및 이전 버전을 지원합니다. 다운그레이드 경로는 지원되지 않습니다."


이라고 PC 쪽에서 에러가 발생됩니다.

DB Compatibility Level 이 문제라고 하여 90으로 호환성을 낮추어도 위와 같습니다.

다른 어떤 문제가 있을까요??


 

 

댓글
2016.11.25 10:36:13 (*.6.129.207)
[레벨:37]Terry

말 그대로 DB 자체가 지원이 안되는겁니다.

상위호환이 안되는거죠..^^;;


2가지중 편하신걸로 처리하시면 될듯..


1안) SQL EXPRESS 2008 -> SQL EXPRESS 2012 로 변경

2안) SQL 2012 R2 의 DB -> 스크립트로 EXPORT 하여 , SQL 2008 SSMS에서 해당스크립트 실행


2안의 경우

하기 링크 참고하세요..


http://www.sqler.com/index.php?mid=bSQLQA&search_target=comment_userid&search_keyword=chy18&document_srl=851611


수고하세요~


I'm using System.Data.SQLite provider in an ASP.NET application (framework 4.0). The issue I'm running into is that when I INSERT something in a table in the SQLite database, the database gets locked and the lock isn't being released even after the connection is disposed.

When trying to access the file, the error is: "The process cannot access the file 'catalog.sqlite' because it is being used by another process."

My code is pretty straightforward, I open the connection, read some data from a SQLServer database, insert that data into SQLite (through SQLiteDataAdapter) and then close the connection and dispose everything just to be on the safe side. But still, I get that error when I try to zip the file after it's being populated with the data.

I've read all kind of suggestions here on StackOverflow but none of them has helped solving the problem (turning off the antivirus, changing the transaction model, waiting a few seconds before zipping up the file, wrapping all the insert calls into a transaction, etc.. but none has helped solving this issue.

Maybe there's something specific to ASP.NET (multithreading being the issue? Even though I'm testing it on a development machine where there's only one call to that function and no concurrency?)

As a side note, I tried avoiding DataTable and SQLiteDataAdapter and using only SQLiteCommand directly and that way it works a charm. Of course I can keep building my queries as strings instead of using the data adapters, but I kind of find it a bit awkward when there's a framework built to do that.

    I had the same problem using the datasets/tableadapters generated with the designer shipped with System.Data.Sqlite.dll version 1.0.82.0 -- after closing the connection we were unable to read the database file using System.IO.FileStream. I was disposing correctly both connection and tableadapters and I was not using connection pooling.

    According to my first searches (for example this and this thread) that seemed a problem in the library itself -- either objects not correctly released and/or pooling issues (which I don't use).

    After reading your question I tried to replicate the problem using only SQLiteCommand objects and I found that the problem arises when you don't dispose them. Update 2012-11-27 19:37 UTC: this is further confirmed by this ticket for System.Data.SQLite, in which a developer explains that "allSQLiteCommand and SQLiteDataReader objects associated with the connection [should be] properly disposed".

    I then turned back on the generated TableAdapters and I saw that there was no implementation of the Dispose method -- so in fact the created commands were not disposed. I implemented it, taking care of disposing all the commands, and I have got no problem.

    Here's the code in C#, hope this helps. Please note that the code is converted from the original in Visual Basic, so expect some conversion errors.

    //In Table Adapter    
    protected override void Dispose(bool disposing)
    {
       base.Dispose(disposing);
    
        Common.DisposeTableAdapter(disposing, _adapter, _commandCollection);
    }
    
    public static class Common
    {
        /// <summary>
        /// Disposes a TableAdapter generated by SQLite Designer
        /// </summary>
        /// <param name="disposing"></param>
        /// <param name="adapter"></param>
        /// <param name="commandCollection"></param>
        /// <remarks>You must dispose all the command,
        /// otherwise the file remains locked and cannot be accessed
        /// (for example, for reading or deletion)</remarks>
        public static void DisposeTableAdapter(
            bool disposing,
            System.Data.SQLite.SQLiteDataAdapter adapter,
            IEnumerable<System.Data.SQLite.SQLiteCommand> commandCollection)
        {
            if (disposing) {
                DisposeSQLiteTableAdapter(adapter);
    
                foreach (object currentCommand_loopVariable in commandCollection)
                {
                    currentCommand = currentCommand_loopVariable;
                    currentCommand.Dispose();
                }
            }
        }
    
        public static void DisposeSQLiteTableAdapter(
                System.Data.SQLite.SQLiteDataAdapter adapter)
        {
            if (adapter != null) {
                DisposeSQLiteTableAdapterCommands(adapter);
    
                adapter.Dispose();
            }
        }
    
        public static void DisposeSQLiteTableAdapterCommands(
                System.Data.SQLite.SQLiteDataAdapter adapter)
        {
            foreach (object currentCommand_loopVariable in {
                adapter.UpdateCommand,
                adapter.InsertCommand,
                adapter.DeleteCommand,
                adapter.SelectCommand})
            {
                currentCommand = currentCommand_loopVariable;
                if (currentCommand != null) {
                    currentCommand.Dispose();
                }
            }
        }
    }

    Update 2013-07-05 17:36 UTC gorogm's answer highlights two important things:

    • according to the changelog on the official site of System.Data.SQLite, starting from version 1.0.84.0 the above code should not be needed, since the library takes care of this. I haven't tested this, but in the worst case you only need this snippet:

      //In Table Adapter    
      protected override void Dispose(bool disposing)
      {
        base.Dispose(disposing);
      
        this.Adapter.Dispose();
      }
    • about the implementation of the Dispose call of the TableAdapter: it is is better to put this in a partial class, so that a dataset regeneration does not affected this code (and any additional code you may need to add).

      I have the same problem. My scenario was after getting the data inside SQLite Database file I want to delete that file but it always throw an error "...using by other process". Even I dispose the SqliteConnection or SqliteCommand the error still occur. I've fixed the error by calling GC.Collect().

      Code snippet

      public void DisposeSQLite()
      {
          SQLiteConnection.Dispose();
          SQLiteCommand.Dispose();
      
          GC.Collect();
      }

      Hope this help.

        In my case I was creating SQLiteCommand objects without explicitly disposing them.

        var command = connection.CreateCommand();
        command.CommandText = commandText;
        value = command.ExecuteScalar();

        I wrapped my command in a using statement and it fixed my issue.

        static public class SqliteExtensions
        {
            public static object ExecuteScalar(this SQLiteConnection connection, string commandText)
            {
                // Added using
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = commandText;
                    return command.ExecuteScalar();
                }
            }
        }

        Then you can use it like this

        connection.ExecuteScalar(commandText);

          The following worked for me:  MySQLiteConnection.Close(); SQLite.SQLiteConnection.ClearAllPools()

          I found edymtt's answer right about blaming TableAdapters / Datasets, but instead of modifying the every time re-generated TableAdapter codefile, I found an other solution: to manually call .Dispose on the TableAdapter's child elements. (In .NET 4.5, latest SQLite 1.0.86)

          using (var db = new testDataSet())
          {
              using (testDataSetTableAdapters.UsersTableAdapter t = new testDataSetTableAdapters.UsersTableAdapter())
              {
                  t.Fill(db.Users);
                  //One of the following two is enough
                  t.Connection.Dispose(); //THIS OR
                  t.Adapter.Dispose();    //THIS LINE MAKES THE DB FREE
              }
              Console.WriteLine((from x in db.Users select x.Username).Count());
          }

            In most cases the problem will arise if you don't dispose your readers and commands properly. There is a scenario in which commands and readers will not dispose properly.

            Scenario 1: In case you are running a boolean function. before a result is reached the code in the finally block will not excecute. This is a big problem if you are going to be evaluating the results of function isDataExists while executing code if it suits the result i.e

                if(isDataExists){
                    // execute some code
                }

            The function being evaluated

                public bool isDataExists(string sql)
                {
                    try
                    {
                        OpenConnection();
                        SQLiteCommand cmd = new SQLiteCommand(sql, connection);
                        reader = cmd.ExecuteReader();
                        if (reader != null && reader.Read())
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    catch (Exception expMsg)
                    {
                        //Exception
                    }
                    finally
                    {
                        if (reader != null)
                        {
                            reader.Dispose();
                        }
                        CloseConnection();
                    }
                    return true;
                }

            Solution: Dispose your reader and command inside the try block as follows

                        OpenConnection();
                        SQLiteCommand cmd = new SQLiteCommand(sql, connection);
                        reader = cmd.ExecuteReader();
                        if (reader != null && reader.Read())
                        {
                            cmd.Dispose();
                            CloseConnection();
                            return true;
                        }
                        else
                        {
                            cmd.Dispose();
                            CloseConnection();
                            return false;
                        }

            Finally dispose the reader and command just in case some thing went wrong

                    finally
                    {
                        if (reader != null)
                        {
                            reader.Dispose();
                        }
                        CloseConnection();
                    }

              As said earlier SQLite objects must be destroyed. However, there is a strange behavior: connection must be open during a call Dispose on commands. For example:

              using(var connection = new SqliteConnection("source.db"))
              {
                  connection.Open();
                  using(var command = connection.CreateCommand("select..."))
                  {
                      command.Execute...
                  }
              }

              works fine, but:

              using(var connection = new SqliteConnection("source.db"))
              {
                  connection.Open();
                  using(var command = connection.CreateCommand("select..."))
                  {
                      command.Execute...
                      connection.Close();
                  }
              }

              gives the same file lock

              This was one of the top google results I had found when I ran into this error. However, none of the responses helped me so after more searching around and googling I came up with this code that works from some of the code from http://www.tsjensen.com/blog/post/2012/11/10/SQLite-on-Visual-Studio-with-NuGet-and-Easy-Instructions.aspx

              However, I did not have to use the NuGet at all. What my program does is downloads a db file from a server every time it is opened. Then if a user updates that db, it will be uploaded for everyone to get the next time they open the same program. I was getting the error that the file was in use after updating the local file and trying to upload it to our SharePoint. Now it works fine.

              Public Function sqLiteGetDataTable(sql As String) As DataTable
                  Dim dt As New DataTable()
                  Using cnn = New SQLiteConnection(dbConnection)
                      cnn.Open()
                      Using cmd As SQLiteCommand = cnn.CreateCommand()
                          cmd.CommandText = sql
                          Using reader As System.Data.SQLite.SQLiteDataReader = cmd.ExecuteReader()
                              dt.Load(reader)
                              reader.Dispose()
                          End Using
                          cmd.Dispose()
                      End Using
                      If cnn.State <> System.Data.ConnectionState.Closed Then
                          cnn.Close()
                      End If
                      cnn.Dispose()
                  End Using
                  Return dt
              End Function

              Ensuring that any IDisposable (e.g., SQLiteConnection, SQLiteCommand, etc) is properly disposed of solves this problem. I should re-iterate that one must be using "using" as a habit to ensure proper disposing of disposable resources.

              I had the same problem and it was only fixed by disposing the DbCommand in the using statement, but with Pooling = true my problem was fixed!!

                              SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder
                              {
                                  Pooling = true
                              };


              파일 속성에 보관 속성 혹은 읽기 전용 속성이 켜져있는 경우, 해당 오류가 난다면 다음의 방법이 통할 수 있습니다.



              --------------------------------------------------------------------------------------------------------------





              The problem can be that you can not delete or overwrite read-only files. The solution is to change the attributes.

              if(File.Exists(destFile))
              {
                  File.SetAttributes(destFile, FileAttributes.Normal);
              }
              File.Copy(sourcePath, destFile, true); 



              ----------------------------------------------------------------------------------------------------------------

              I'm having problems finding a control (ToggleSwitch) inside my ListView. I have tried several approaches found here on SO or on other places around the web but none seems to be working.

              Here is a the listView markup

              <ListView Name="LampsListView" ItemsSource="{x:Bind Lamps}">
                  <ListView.ItemTemplate>
                      <DataTemplate x:DataType="models:Lamp">
                          <StackPanel Name="StackPanel">
                              <TextBlock Margin="10,0" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left" />
                              <ToggleSwitch Margin="10,0" HorizontalAlignment="Right" Name="LampToggleSwitch" IsOn="{x:Bind State, Converter={ StaticResource IntToIsOn}}" />
                          </StackPanel>
                      </DataTemplate>
                  </ListView.ItemTemplate>
              </ListView>

              I have tried the ContainerFromItem but x will always be null.

               foreach (var item in this.LampsListView.Items)
               {
                   var x = this.LampsListView.ContainerFromItem(item);
               }

              And also the GetChildren approach but even thought GetChildren returns items it wont give me anything I can work with.

               private void FindMyStuff()
               {
                   var ch = this.GetChildren(this.LampsListView);
               }
              
               private List<FrameworkElement> GetChildren(DependencyObject parent)
               {
                   List<FrameworkElement> controls = new List<FrameworkElement>();
              
                   for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); ++i)
                   {
                       var child = VisualTreeHelper.GetChild(parent, i);
                       if (child is FrameworkElement)
                       {
                           controls.Add(child as FrameworkElement);
                       }
                       controls.AddRange(this.GetChildren(child));
                   }
                   return controls;
              }

              And I've tried booth finding the StackPanel and go straight for the LampToggleSwitch.

              The FindMyStuff() is called right after i've updated the ObservableCollection that is bound to the ListView and the update is done from a this.Dispatcher.RunAsync(). I don't know if this has anything to do with it thought.

              Could someone please tell me what I'm doing wrong?

              Generally traversing visual tree or getting items by names/types is in most cases a wrong way of doing thigs, much better would be to implement apropriate binding.

              Nevertheless if you want to do this, you are almost there. As I've tried it should work like this:

              var listViewItem = this.mylist.ContainerFromItem(mylist.Items.First()) as ListViewItem;
              var itemsStackPanel = listViewItem.ContentTemplateRoot as StackPanel;
              var myToggleSwitch = itemsStackPanel.Children.FirstOrDefault(x => x is ToggleSwitch);
              // other way with your helper
              var childByHelper = GetChildren(listViewItem).FirstOrDefault(x => x is ToggleSwitch);

              Just watch out when you run this, if it's done before list is populated, listVieItems will be null.


              게시 날짜: 2016년 4월

              Visual Studio 2017 에 대한 최신 설명서는 Visual Studio 2017 설명서를 참조하세요.

              C#에서 편집하며 계속하기를 사용하면 디버깅하는 동안 중단 모드에서 코드를 변경할 수 있습니다. 디버깅 세션을 중지하고 다시 시작하지 않고도 변경 내용을 적용할 수 있습니다.

              편집하며 계속하기는 중단 모드에서 필요한 내용을 변경한 다음 계속단계 또는 다음 문 설정 같은 디버거 실행 명령을 선택하거나 디버거 창에서 함수를 실행하는 경우에 자동으로 호출됩니다.

              System_CAPS_ICON_note.jpg 참고

              Compact Framework, 최적화된 코드, 혼합된 네이티브/관리 코드 또는 SQL Server CLR(공용 언어 런타임) 통합 코드를 디버깅할 때는 편집과 계속하기가 지원되지 않습니다. 이러한 시나리오 중 하나에서 코드 변경 내용을 적용하려고 하면 디버거에서 편집하며 계속하기가 지원되지 않는다는 대화 상자를 표시합니다.

              편집하며 계속하기를 자동으로 호출하려면

              1. 중단 모드에서 소스 코드를 변경합니다.

              2. 디버그 메뉴에서 계속단계 또는 다음 문 설정을 클릭하거나 디버거 창에서 함수를 실행합니다.

                새 코드가 컴파일되고 새 코드를 사용하여 디버깅이 계속 진행됩니다. 일부 변경 사항은 편집하며 계속하기에서 지원되지 않습니다. 자세한 내용은 지원되는 코드 변경(C#)을 참조하십시오.

              편집하며 계속하기를 사용하거나 사용하지 않도록 설정하려면

              1. 도구 메뉴에서 옵션을 클릭합니다.

              2. 옵션 대화 상자에서 디버깅 노드를 확장하고 편집하며 계속하기를 선택합니다.

              3. 옵션 대화 상자의 편집하며 계속하기 페이지에서 편집하며 계속하기 사용 확인란을 선택하거나 선택 해제합니다.

                디버깅 세션을 다시 시작하면 설정 사항이 적용됩니다.


              Visual Studio에서 원격 컴퓨터 UWP 앱 실행

              UWP 앱에서 원격 컴퓨터를 실행 하려면 Visual Studio 용 원격 도구를 사용 하 여 연결 해야 합니다. 원격 도구를 사용 하 여 실행, 디버깅, 프로 파일링 및 Visual Studio를 실행 하는 다른 컴퓨터에서 한 장치에서 실행 되는 UWP 앱을 테스트할 수 있습니다. 원격 장치에서 실행 되는 Visual Studio 컴퓨터에서 터치, 지리적 위치 및 실제 방향 등의 UWP 앱에 관련 된 기능을 지원 하지 않을 때 특히 효과적일 수 있습니다. 이 항목에서는 원격 세션을 구성하고 시작하는 절차에 대해 설명합니다.

              일부 시나리오에서는 원격 장치에 배포할 때에 자동으로 원격 도구 설치 됩니다.

              • Windows 10 Pc 작성자 업데이트 및 이상 버전을 실행, 용 원격 도구를 자동으로 설치 됩니다.
              • Windows 10 Xbox, IOT 및 HoloLens 장치에 대 한 원격 도구를 자동으로 설치 됩니다.
              • Windows 10 Mobile phone에 물리적으로 연결 해야, 사용 하도록 설정 해야 개발자 모드 선택 해야 장치 디버그 대상으로 합니다. 원격 도구 필요 하거나 지원 하지 합니다.

              Windows 10 Pc의 Windows 사전-작성자의 업데이트 버전을 실행 합니다 설치 해야 원격 도구 원격 컴퓨터에 수동으로 디버그할 수 있습니다. 이 항목의 지침을 따릅니다.

              필수 구성 요소

              원격 장치에서 디버깅하려면

              • 원격 장치와 Visual Studio 컴퓨터를 네트워크를 통해 연결 하거나 USB 또는 이더넷 케이블을 통해 직접 연결 해야 합니다. 인터넷을 통한 디버깅은 지원되지 않습니다.

              • 사용 하도록 설정 해야 개발자 모드합니다.

              • Windows 10 Pc를 Windows 10 작성자의 업데이트 보다 이전 버전의 Windows 10 실행을 사용 해야 설치 하 고 원격 디버깅 구성 요소 실행합니다.

              보안

              기본적으로 유니버설 (암호화 되지 않은 프로토콜) Windows 10에서 사용 됩니다. 이 프로토콜은 신뢰할 수 있는 네트워크만 사용 해야 합니다.디버깅 연결이 악의적인 사용자가 가로채 고 개발 및 원격 컴퓨터 사이 전달 되는 데이터를 변경할 수에 취약 합니다.

              경고

              인증 모드를 설정 하면 네트워크 보안이 없습니다 없는 유니버설 (암호화 되지 않은 프로토콜) 또는 None합니다. 네트워크를 악의적인 트래픽이나 유해 트래픽에서 위험이 없는 경우에 이러한 모드를 선택 합니다.

              USB 케이블을 사용 하 여 직접 연결 하는 방법

              Windows 10에서 배포할 수 있습니다는 USB로 연결 된 장치를 선택 하 여 장치 대신 원격 컴퓨터 배포 대상으로 (에서 수행할 수 있습니다는 표준도구 모음 또는 디버깅 속성 페이지에서).

              원격 디버깅을 위해 Visual Studio 프로젝트 구성

              프로젝트 속성에서 연결할 원격 장치를 지정합니다. 절차는 프로그래밍 언어에 따라 다릅니다. 원격 장치의 네트워크 이름을 입력 하거나에서 선택할 수는 원격 연결 대화 상자.

              원격 디버거 연결 대화 상자 선택

              이 대화 상자에는 Visual Studio 컴퓨터의 로컬 서브넷에 있으며 원격 디버거를 실행 중인 장치만 나열됩니다.

              원격 장치에 연결하는 데 문제가 있을 경우 장치의 IP 주소를 입력해 보십시오. 장치의 IP 주소를 확인하려면 명령 창을 연 다음 ipconfig를 입력합니다. 그러면 IP 주소가 IPv4 Address로 나열됩니다.

              C# 및 Visual Basic 프로젝트에 사용할 원격 장치 선택

              1. 솔루션 탐색기에서 프로젝트 이름을 선택한 다음 바로 가기 메뉴에서 속성 을 선택합니다.

              2. 디버그를 선택합니다.

              3. 대상 장치 목록에서 원격 컴퓨터 를 선택합니다.

              4. 원격 컴퓨터 상자에 원격 장치의 네트워크 이름을 입력하거나 찾기 를 선택하여 원격 디버거 연결 선택 대화 상자에서 장치를 선택합니다.

                원격 디버깅에 대 한 프로젝트 속성을 관리 되는

              JavaScript 및 c + + 프로젝트에 사용할 원격 장치 선택

              1. 솔루션 탐색기에서 프로젝트 이름을 선택한 다음 바로 가기 메뉴에서 속성 을 선택합니다.

              2. 구성 속성 노드를 확장한 다음 디버깅을 선택합니다.

              3. 실행할 디버거 목록에서 원격 디버거 를 선택합니다.

              4. 컴퓨터 이름 상자에 원격 장치의 네트워크 이름을 입력하거나 해당 상자에서 아래쪽 화살표를 선택하여 원격 디버거 연결 선택 대화 상자에서 장치를 선택합니다.

                C+ + 프로젝트 원격 디버깅에 대 한 속성

              원격 도구 다운로드 및 설치 (사전 작성자 업데이트)

              이전 작성자의 업데이트 버전의 Windows 10을 사용 하는 경우 이러한 지침을 따릅니다. 그렇지 않으면이 섹션을 건너뛸 수 있습니다.

              1. 장치 또는 서버 디버깅 하려는 컴퓨터 (을 하지 않고 Visual Studio를 실행 하는 컴퓨터)에서 올바른 버전을의 원격 도구를 가져옵니다.

                버전링크노트
                Visual Studio 2017 (최신 버전)원격 도구항상 장치 운영 체제 (x86 또는 x64)를 일치 하는 버전을 다운로드 합니다. 향상 된 보안 모드 설정 (Windows Server) 메시지가 표시 되 면 새 신뢰할 수 있는 사이트 추가 해야 합니다.
                Visual Studio 2017 (구)원격 도구Visual Studio 2017의 이전 릴리스에 대 한 원격 도구가 My.VisualStudio.com에서 제공 됩니다. 메시지가 표시 되 면 조인 무료 Visual Studio Dev Essentials 그룹 또는 Visual Studio 구독을 사용 하 여 로그인 id입니다. 향상 된 보안 모드 설정 (Windows Server) 메시지가 표시 되 면 새 신뢰할 수 있는 사이트 추가 해야 합니다.
                Visual Studio 2015 업데이트 3원격 도구메시지가 표시 되 면 조인 무료 Visual Studio Dev Essentials 그룹 또는 Visual Studio 구독을 사용 하 여 로그인 id입니다. 향상 된 보안 모드 설정 (Windows Server) 메시지가 표시 되 면 새 신뢰할 수 있는 사이트 추가 해야 합니다.
                Visual Studio 2015 (구)원격 도구메시지가 표시 되 면 조인 무료 Visual Studio Dev Essentials 그룹 또는 Visual Studio 구독을 사용 하 여 로그인 id입니다. 향상 된 보안 모드 설정 (Windows Server) 메시지가 표시 되 면 새 신뢰할 수 있는 사이트 추가 해야 합니다.
                Visual Studio 2013원격 도구Visual Studio 2013 설명서에서 페이지를 다운로드 합니다.
                Visual Studio 2012원격 도구Visual Studio 2012 설명서에서 페이지를 다운로드 합니다.
              2. 다운로드 페이지에서 운영 체제 (x 86, x64 또는 ARM)와 일치 하는 버전의 도구를 선택 하 고 원격 도구를 다운로드 합니다.

                중요

                Visual Studio 버전에 일치 하는 가장 최신 버전의 원격 도구를 설치 하는 것이 좋습니다. 버전이 일치 하지 않는 권장 되지 않습니다. 또한 설치 하려는 운영 체제와 동일한 아키텍처가 있는 원격 도구를 설치 해야 합니다. 즉, 64 비트 운영 체제를 실행 하는 원격 컴퓨터에서 32 비트 응용 프로그램을 디버깅 하려면 원격 컴퓨터에서 64 비트 버전의 원격 도구를 설치 해야 합니다.

                화면 3 x64 ARM에서 전환 아키텍처. ARM 버전의 원격 도구에 대 한 Visual Studio 2017 ´ ù. Visual Studio 2015에 대 한 Visual Studio 2015 RTW 다운로드에 ARM 버전을 찾습니다.

              3. 실행 파일을 다운로드 했으면 다음 섹션으로 이동 하 고 설치 지침을 따릅니다.

              원격 컴퓨터에 원격 디버거 (msvsmon.exe)를 복사 하 고 실행 하려고 하는 경우 주의 해야 하는 원격 디버거 구성 마법사 (rdbgwiz.exe) 다운로드 하는 경우에 설치 되는 도구입니다. 특히 원격 디버거가 서비스로 실행 되도록 하는 경우 나중에 구성에 대 한 마법사를 사용 해야 합니다. 자세한 내용은 참조 구성 (선택 사항) 원격 디버거를 서비스로합니다.

              원격 디버거 설정

              원격 컴퓨터에 관리 권한이 있어야 합니다.

              1. 원격 디버거 응용 프로그램을 찾습니다. (이 설치 되어 있는, 위치에 msvsmon.exe를 찾거나 여 시작 메뉴 및 검색에 대 한 열 원격 디버거.)

                원격 서버에 원격 디버거를 실행 하는 경우 원격 디버거 응용 프로그램을 마우스 오른쪽 단추로 클릭 하 고 선택할 수 관리자 권한으로 실행합니다. 원격 서버에서 실행 되지 않는 경우 바로 정상적으로 시작 합니다.

              2. 처음으로 (또는 구성 하기 전에) 원격 도구를 시작 하 고, 원격 디버깅 구성 대화 상자가 나타납니다.

                RemoteDebuggerConfWizardPage

              3. Windows 서비스 API (Windows Server 2008 r 2 에서만 발생 함)는 설치 되지 않은 경우 선택 된 설치 단추입니다.

              4. 원격 도구를 사용하려는 네트워크 종류를 선택합니다. 하나 이상의 네트워크 형식을 선택해야 합니다. 컴퓨터가 도메인을 통해 연결된 경우 첫 번째 항목을 선택해야 합니다. 컴퓨터가 작업 그룹 또는 홈 그룹을 통해 연결된 경우 두 번째 또는 세 번째 항목을 적절하게 선택해야 합니다.

              5. 선택 원격 디버깅 구성 방화벽을 구성 하 고 도구를 시작 합니다.

              6. 구성이 완료되면 원격 디버거 창이 나타납니다.

                RemoteDebuggerWindow

                이제 원격 디버거를 연결을 기다리고 있습니다. 서버 이름의 기록 하 고 나중에 Visual Studio에서 사용 하는 구성와 일치 해야 하기 때문에 포트 표시 되는 번호입니다.

                디버깅 및 원격 디버거를 중지 해야 할 완료 되 면 클릭 파일 > 종료 창에 있습니다. 다시 시작할 수 있습니다는 시작 메뉴 또는 명령줄에서:

                <Visual Studio 설치 디렉터리 > \Common7\IDE\Remote 디버거\< x86, x64 또는 Appx > \msvsmon.exe합니다.

              원격 디버깅 세션 시작

              로컬 세션의 경우와 같은 방법으로 원격 디버그 세션을 시작, 중지, 탐색할 수 있습니다. Pre-작성자의 업데이트 버전의 Windows 10에서 원격 장치에서 원격 디버깅 모니터가 실행 되 고 있는지 확인 합니다.

              그런 다음 디버그 메뉴에서 디버깅 시작 을 선택합니다(키보드: F5). 프로젝트가 다시 컴파일된 다음 원격 장치에 배포되어 시작됩니다. 디버거는 중단점에서 실행을 일시 중단하며 사용자는 한 단계씩 코드를 실행하거나, 프로시저 단위로 실행하거나 코드를 종료하여 한 번에 한 줄씩 실행할 수 있습니다. 디버깅 중지 를 선택하여 디버그 세션을 끝내고 원격 응용 프로그램을 종료할 수 있습니다.

              참고 항목

              고급 원격 배포 옵션
              Visual Studio로 UWP 앱 테스트 
              Visual Studio에서 앱 디버깅


              디자이너 속성에서는 다룰 수 없어.

              탭 컨트롤러에서 동적으로 제거해라!




              • The tabPage.Enabled seems to be working fine, but is marked as "not to be used":

                This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.
                This member is not meaningful for this control.

                So you should disable the tab page by disabling every control in the tab. See this for instance.

              • Show / hide

                There is an existing tabPage.Visible property but it does not seem to have any effect. Besides, it is also marked as "not to be used", and msdn advises to remove the tab page from the tab control in order to hide it:

                // Hide the tab page
                tabControl.TabPages.Remove(tabPage1);
                // Show the tab page (insert it to the correct position)
                tabControl.TabPages.Insert(0, tabPage1);




              Nuget 패키지 관리자에서 Universal Window Platform 다운그레이드 혹은 업그레이드 하시면 됩니다.

              그러면 재설치되면서 Nuget에 있는 Refernce 재설정 됩니다.


              큰 변화를 주지 않기 위해, 영향이 없는 정도에서만 올렸다 내리세요.


              상당히 재설치 과정이 오래걸립니다.



              출처: https://support.microsoft.com/ko-kr/help/837910/mouse-wheel-events-do-not-work-in-the-visual-basic-6-0-ide



              간단히 dll 등록 후 사용할 경우, 아래 zip 파일을 이용한다.


              VBA Mouse Wheel Fix.zip




              컴파일 해서 쓰려면 아래 실행파일을 사용한다.


              vb6mousewheel.exe


              증상


              Microsoft Visual Basic 6.0 IDE에서 마우스 휠을 사용 하 여 스크롤할 수 없습니다.

              원인


              Visual Basic 6.0 IDE에서 마우스 휠을 사용 하 여 스크롤을 기본적으로 지원 하지 않은 때문에이 문제가 발생 합니다.

              해결 방법


              이 문제를 해결 하려면 다음 방법 중 하나를 사용 합니다.

              방법 1

              추가 기능 DLL 및 추가 기능 DLL을 만드는 데 사용 되는 코드를 포함 하는 VB6 마우스 Wheel.exe 파일을 다운로드 합니다.
              1. VB6 마우스 Wheel.exe 파일을 다운로드 합니다. 파일은 Microsoft 다운로드 센터에서 다운로드할 수:
                Download 지금 VB6MouseWheel.EXE 패키지 다운로드

                Microsoft 지원 파일을 다운로드하는 방법에 대한 자세한 내용을 보려면 Microsoft 기술 자료의 다음 문서 번호를 클릭합니다.
                119591 온라인 서비스 로부터 Microsoft 지원 파일을 구하는 방법
                Microsoft는 이 파일에 대해 바이러스 검사를 시행하였습니다. Microsoft는 파일이 게시된 날짜에 사용할 수 있었던 최신 바이러스 검색 소프트웨어를 사용했습니다. 파일은 파일을 무단으로 변경할 수 없도록 보안이 강화된 서버에 저장됩니다.
              2. 시작실행을 차례로 누르고 형식 regsvr32 < 경로 > \VB6IDEMouseWheelAddin.dll을 선택한 다음 확인을 누릅니다.
              3. Visual Basic 6.0을 시작 합니다.
              4. 추가 기능을 클릭합니다 하 고을 클릭합니다
                관리자 추가 기능에서합니다.
              5. 추가 기능 관리자 목록에서 클릭
                MouseWheel Fix.
              6. 로드/언로드 확인란을 선택한 다음 시작할 때 로드 확인란을 선택 취소 합니다.
              7. 확인을 클릭합니다.



              프로젝트 탭의 참조, 구성요소를 이용하면 된다.



              1. DLL을 등록하는 방법



              2. OCX 등록하는 방법




              DataRow row = dt.Rows[0];

              Datatime date = (DateTime) row["stTime"];


              date.toString("yyyy-MM-dd HH:mm:ss.fff");

              + Recent posts