문제

저는 linux/windows/mac/기타 플랫폼용 C# 코드를 작성하려고 하며 이식 가능한 코드에 대한 모범 사례를 찾고 있습니다.

프로젝트 단핵증 좋은 게 있어요 포팅 자원.

이식 가능한 C#에 대한 모범 사례는 무엇입니까?

도움이 되었습니까?

해결책

실제로 winforms를 사용해봤는데 괜찮았습니다.정말 못생겼지만 효과가 있었어요.

분명히 P/Invoke나 레지스트리와 같은 win32 항목을 사용하지 마십시오.또한 타사 DLL도 알고 있어야 합니다.예를 들어, 우리는 OSX/Linux에서 실행하려면 교체해야 하는 네이티브 코드가 실제로 포함된 타사 SQLite dll을 사용합니다.

다른 팁

나는 "모범 사례"라는 용어를 싫어합니다. 일부 사례는 모든 상황에서 가장 좋을 수 있는 것처럼 보이기 때문입니다. 이는 위험한 일입니다. 하지만 다중 플랫폼 코드(및 대부분의 경우 다른 유형의 개발):

지속적인 통합 엔진을 사용하고 항상 모든 대상 플랫폼을 위해 빌드.

너무 복잡해 보이죠?글쎄요, 정말로 여러 플랫폼을 지원해야 한다면 그렇게 하는 것이 더 좋습니다.코드와 라이브러리 사용에 아무리 주의를 기울여도 너무 늦게 테스트하면 앱의 많은 부분을 재작업하는 데 엄청난 시간을 소비하게 될 것입니다.

파일 이름 및 경로 조작과 관련된 모든 것에 주의하고 다음에서 이식 가능한 .NET 메서드를 활용하십시오. 시스템.IO.경로 즉.

대신에:

string myfile = somepath + "\\file.txt";

하다:

string myfile = Path.Combine(somepath, "file.txt");

경로 구분 기호를 지정해야 하는 경우 다음을 사용합니다. 경로.구분자

새 줄에 " "을 사용하지 마세요.사용 환경.NewLine

기억하다 :

  • *NIX는 개행 문자(" ")만 사용합니다.
  • Windows에서는 " "을 사용합니다.
  • MacIntosh는 " "을 사용합니다(이 부분에 대해서는 잘 모르겠습니다. 수정해 주시기 바랍니다).

L.E.:일부 최신 MacOS에서는 " " 줄 구분 기호를 더 이상 사용하지 않는 것 같습니다.

GUI용 Windows.Forms를 사용하지 마세요. 하지만 Mono가 이미 그 점을 언급했을 것입니다.Gtk#은 크로스 플랫폼 GUI에 대해 훨씬 더 일관되고 안정적입니다.

몇 년 전에 나는 당신에게 내 책을 한 권 사라고 조언했을 것입니다. 하지만 이 책은 다소 오래된 것이므로 이제 Mono 사이트의 정보를 참고해야 합니다.

그만큼 MoMA(모노 마이그레이션 분석기) 도구는 기존 .NET 애플리케이션을 분석하고 이식성 문제를 경고하는 데 매우 적합하지만 새 코드에 대한 가장 좋은 방법은 개발 작업에 최신 안정 버전의 Mono를 사용하는 것입니다.

Orion이 말했듯이 제3자 DLL을 사용할 때는 조심해야 합니다. 하지만 제 공동 저자는 다음과 같이 썼습니다. 네이티브프로브 타사 소프트웨어를 신속하게 확인하려는 경우 P/Invoke 종속성에 대한 DLL을 분석하는 도구입니다.

MS .NET에서 개발하기로 결정한 경우 Mono에서 빌드 및 단위 테스트도 시도해야 하며 Microsoft.Win32 및 System.Management 네임스페이스와 같은 여러 Windows 관련 네임스페이스도 주의해야 합니다.

코드를 이식 가능하게 하려면 Mono 사이트에서 완성된 기능 목록을 면밀히 검토해야 합니다.프레임워크의 각 클래스와 완성도 수준에 대해 자세히 설명합니다.너무 멀리 진행하여 중요한 기능이 아직 구현되지 않았음을 발견하지 않도록 설계 프로세스 중에 이러한 사항을 고려해야 합니다.

다른 간단한 것들이 있습니다.경로 문자를 가정하지 않는 것과 같습니다.또는 개행 문자.

저는 Linux 또는 OSX의 Mono에서 NUnit을 정기적으로 컴파일하는 사람 중 한 명입니다.

또한 컴파일러가 정확히 동일하게 작동한다고 가정하지 마십시오.최근 MS C# 컴파일러가 Mono 컴파일러에 포함되지 않은 항목을 포함하는 것으로 나타나 빌드 스크립트에 추가 참조가 필요한 문제를 발견했습니다.

그 외에는 매우 간단했습니다.우리가 처음 받았을 때를 기억해 Mono/Linux에서 실행되는 GUI - 꽤 흥미로웠어요(비록 그렇긴 하지만요) ~였다 아주 못생긴)

누락된 항목 1개:파일 이름이 대소문자를 구분하는지 확인하세요.파일.열기("MyFile.txt");파일 이름이 myfile.txt인 경우 Unix에서는 작동하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top