Core 2.0의 dll 실시간 업데이트,https,의존 패키지 변경 문제 및 해결

3545 단어

오늘 모든 개발 환경은 맥 OS의 Visual Studio Code + 명령행 컴파일링으로 옮겨졌고, 실행 서버는 CentOS 7로 윈도우즈와 아무런 관련이 없습니다.Relese가 컴파일되어 로컬에서 서버와 같은 운영 환경에서 실행되기만 한다면 실제 서버로 이전하는 것은 어렵지 않을 것입니다.
 
다음은 2.0 버전으로 이전한 후 겪는 3가지 문제와 해결 방법입니다.
 
1: dll이 실시간으로 업데이트되지 않을 때가 있습니다. (매번 만나는 것이 아니라 Centos에서만 발생하는 일입니다.) 때로는 dll와 관련된 모든 테두리 파일을 함께 전송해야 합니다. (예를 들어 조립된 xxxx.config.json, xxxx.runtime.json).) 그렇지 않으면 프로그램을 다시 시작한 후에 바로 업데이트할 수 있습니다. (여기는 다시 시작하는 프로그램입니다.) 그렇지 않으면 프로그램을 다시 시작하는 것이 무효입니다. 이 상황이 발생하면시스템을 재부팅한 후에도 (여기가 재부팅 시스템임을 주의하십시오) 과거의 dll을 불러옵니다. 몇 시간 후에 다시 수동으로 시스템을 재부팅해야 최신 dll을 불러옵니다.
이치상 말이 안 되지만 이것은 내가 실제로 만난 사례이다. 원인은 모르겠다. 모르겠다. 고생할 시간도 없다. 이런 메커니즘은 측면에서 증명할 수 있다. 네가 정상적으로 서비스를 실행하고 있을 때 디렉터리에서 업데이트를 실행하고 심지어 dll를 삭제할 수 있다. 다시 시작하지 않으면 실행 중인 프로그램은 영향을 받지 않는다. 이것은 linux버전의 마운트 메커니즘이 맥과 윈도우즈와 다르다는 것을 의미한다.이것은 기존 dll을 모두 어느 곳으로 복사한 후, json 파일의 시간과 내용을 비교한 후에야 실행될 수 있습니다.
다른 linux도 이럴지 모르겠어요.
 
 
2:https 설정이 이전과 다르다
Kestrel은 독립된 완전한 서버로 진화되어 실제 요청에 문제가 없지만 1.1 및 이하 버전에서https를 불러오는 방법은 적용되지 않기 때문에 다음과 같은 방법으로 변경해야 한다.
            var WebServer = new WebHostBuilder()
            
            .UseKestrel(options => options.Listen(IPAddress.Any, servicePort, listenOptions =>
            {
                listenOptions.UseHttps(new X509Certificate2("  .pfx", "pfx     "));
                options.Limits.MaxConcurrentConnections = 100;
                options.Limits.MaxConcurrentUpgradedConnections = 100;
                options.Limits.MaxRequestBodySize = 10 * 1024;
            }))
            .UseContentRoot(AppContext.BaseDirectory)
            .UseStartup()
            .Build();

            WebServer.Run();

 
많은 사람들이Lets Encript를 통해https를 얻을 수 있다고 믿습니다. 원시적으로 얻은 키는 pfx 형식이 아닙니다. 온라인 변환을 아무렇게나 찾으면 됩니다.
 
3, 의존 패키지 변경
preview3을 사용하지 않고 preview2에서 정식 2.0으로 옮겼습니다. 아마도 저와 같이 옮긴 후에 View를 불러올 때'Cannot find compilation library location for package'Microsoft. Win32. Registry'가 나타날 것입니다. 이 가방의 이름을 보고 깜짝 놀랐습니다. 실제로 이것은 win32와 필연적인 관련이 없습니다.해결 방법:
csproj에 추가하기
<MvcRazorExcludeRefAssembliesFromPublish>falseMvcRazorExcludeRefAssembliesFromPublish>

다음을 포함합니다.
   
컴파일링이 발표된 후 실행 디렉터리에refs 폴더가 존재하는지 확인하십시오. 그 안에 모두 시스템입니다.xxxx、Microsoft.xxx 이런 기본 dll만 있으면 돼요.
이 예는 Google에서 이 질문을 검색했을 때, 다른 사람이 비슷한 다른 가방인 Cannot find를 만났다는 것을 발견했을 뿐입니다.
 
다음은 아직 해결되지 않은 것이니, 여러분의 토론을 기다리겠습니다.
 
1, 현재 나는 프로젝트를 전체 플랫폼에서 통용되는 dll로 컴파일하고, 맥이 컴파일한 dll은centos에서 실행되며, 실제 패키지는 시스템에 설치된 CLR에 저장된다.또 다른 방법은 컴파일 과정에서runtime를 지정하고centos를 컴파일하여 완전 2진법, 녹색 안전배치의 완전한 실행 패키지(용량이 클 것)를 얻으면 생산 환경에 던져서 바로 실행할 수 있다. 이런 경우 나는 1.0 베타에서만 윈도우즈에서 성공적으로 컴파일했다. 현재 맥은 컴파일할 수 없고 명령행은 20분 동안 가짜로 죽어도 반응하지 않는다.
 
2, Visual Studio for Mac를 시도하고 싶지만 Release 발표를 할 수 없습니다. GUI에서 설정할 수 없습니다. Release로 설정한 후에 창을 바꾸고 다시 Debug로 돌아갑니다. (저는 윈도우즈 비주얼 스튜디오에서 해결 방안에 통일적으로 설정된 이치를 알고 있습니다. 소용없습니다) csproj의 관련 설정을 수동으로 수정해도 소용이 없어서 포기했습니다.
 
3, 내가 CentOS 7을 선택한 이유는 Minimal 버전이 있고 메모리 등 자원의 요구가 낮기 때문이다. 레드하트의 쌍둥이이기 때문이 아니다. 만약에 동호인이 더 좋은 가격의 Linux가 있다는 것을 발견하면 추천해 주시고 먼저 감사를 드립니다.
 
4, 코어는 정식으로 플랫폼을 뛰어넘었지만 마이크로소프트는 또 다른 핵무기를 가지고 있겠지:.net native 다음 글이 있습니까?윈도우즈 아이폰만 지원하는 것을 본 이후로 소리가 끊이지 않았다.
 
공식 발표 하루 만에 추가 마이그레이션 문제 발생

좋은 웹페이지 즐겨찾기