본문 바로가기

.Net/Xamarin

모노프로젝트 설치 및 문제 해결

 


1. 필수 소프트웨어 설치
yum -y install httpd httpd-devel make glib2-devel libpng-devel libjpeg-devel giflib-devel libtiff-devel libX11-devel gcc* fontconfig-devel bison gettext bzip2 libtool automake autoconf wget unzip


2. 다운로드 - 2014-04-09 현재 최신버전 다운로드

-- mono : Mono is a free and open source project led by Xamarin (formerly by Novell and originally by Ximian) to create an Ecma standard-compliant, .NET Framework-compatible set of tools including, among others, a C# compiler and a Common Language Runtime.
-- XSP : XSP is a simple, standalone webserver written in C# that hosts ASP.NET's System for Linux and other Unix operating systems
-- mod_mono : mod_mono is a module for the Apache HTTP Server that allows for hosting of ASP.NET pages and other assemblies on multiple platforms by use of the Mono development platform
-- libgdiplus : 
Run mono with --security=verifiable and it will run with the proper code verifier.

It does look like those assemblies have been using obfuscation tools that produce assemblies that are too broken for mono to handle.

[root@mono proc]# cd /opt
[root@mono opt]# mkdir mono
[root@mono opt]# cd /tmp
[root@mono tmp]# mkdir mono
[root@mono tmp]# cd mono

[root@mono mono]# wget http://download.mono-project.com/sources/mono/mono-3.4.0.tar.bz2
[root@mono mono]# wget http://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2
[root@mono mono]# wget http://download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2
[root@mono mono]# wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2

[root@mono mono]# tar -xjf mono-3.4.0.tar.bz2
[root@mono mono]# tar -xjf xsp-2.10.2.tar.bz2
[root@mono mono]# tar -xjf mod_mono-2.10.tar.bz2
[root@mono mono]# tar -xjf libgdiplus-2.10.tar.bz2

[root@mono mono]# ls -al
합계 78652
drwxr-xr-x.  6 root root      4096 2014-04-09 15:25 .
drwxrwxrwt. 13 root root      4096 2014-04-09 15:21 ..
drwxrwxrwx.  6 1000 users     4096 2011-01-14 07:43 libgdiplus-2.10
-rw-r--r--.  1 root root   1962898 2011-02-15 05:39 libgdiplus-2.10.tar.bz2
drwxrwxrwx.  4 1000 users     4096 2011-01-14 07:48 mod_mono-2.10
-rw-r--r--.  1 root root    259321 2011-02-15 05:39 mod_mono-2.10.tar.bz2
drwxr-xr-x. 19 1000  1000     4096 2014-04-01 05:29 mono-3.4.0
-rw-r--r--.  1 root root  77992708 2014-04-01 05:27 mono-3.4.0.tar.bz2
drwxrwxrwx. 11 1000 users     4096 2011-04-15 04:54 xsp-2.10.2
-rw-r--r--.  1 root root    284801 2011-04-15 03:54 xsp-2.10.2.tar.bz2


3. 설치
-- libgdiplus
[root@mono mono]# cd libgdiplus-2.10
[root@mono libgdiplus-2.10]# ./configure --prefix=/opt/mono
[root@mono libgdiplus-2.10]# make; make install;

-- mono
[root@mono libgdiplus-2.10]# cd ../mono-3.4.0
[root@mono mono-3.4.0]# ./configure  --prefix=/opt/mono --with-libgdiplus=/opt/mono
[root@mono mono-3.4.0]# make; make install;

##### 모노설치에러 ##############################################
mkdir -p -- /usr/lib/mono/xbuild/Microsoft/Portable/v4.0
/usr/bin/install -c -c -m 644 targets/Microsoft.Portable.Common.targets /usr/lib/mono/xbuild/Microsoft/Portable/v4.0/Microsoft.Portable.Common.targets
/usr/bin/install: cannot stat `targets/Microsoft.Portable.Common.targets': No such file or directory
참조 : http://stackoverflow.com/questions/22844569/build-error-mono-3-4-0-centos
http://smdn.jp/programming/mono/build_install/mono-3.4/

cd /tmp/mono/mono-3.4.0/mcs/tools/xbuild/targets
[root@mono targets]# vi Microsoft.Portable.Common.targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\Microsoft.Portable.Core.props" />
<Import Project="..\Microsoft.Portable.Core.targets" />
</Project>

~
[root@mono targets]# chown 1000:1000 Microsoft.Portable.Common.targets
다시설치

--XSP
[root@mono mono-3.4.0]# cd ../xsp-2.10.2
[root@mono xsp-2.10.2]# ./configure --prefix=/opt/mono
[root@mono xsp-2.10.2]# make; make install;

-- mod-mono
[root@mono xsp-2.10.2]# cd ../mod_mono-2.10
[root@mono mod_mono-2.10]# ./configure --prefix=/opt/mono --with-mono-prefix=/opt/mono
[root@mono mod_mono-2.10]# make; make install;
[root@mono mod_mono-2.10]# mv /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/

-- APACHE 설정
[root@mono mod_mono-2.10]# cd /etc/httpd/
[root@mono httpd]# vi ./conf/vi httpd.conf - 맨 하단에 아래와 같이 VirtualHost 추가

NameVirtualHost 111.111.111.111:80

#<VirtualHost 111.111.111.111:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>


<VirtualHost *:80>
    ServerAdmin dev@hlmc.co.kr
    DocumentRoot /var/www.monotest.co.kr
    ServerName www.monotest.co.kr
    ErrorLog logs/www.monotest.co.kr-error_log
    CustomLog logs/www.monotest.co.kr-access_log common

    MonoServerPath www.monotest.co.kr "/opt/mono/bin/mod-mono-server4"
    MonoDebug www.monotest.co.kr true
    MonoSetEnv www.monotest.co.kr MONO_IOMAP=all
    MonoApplications www.monotest.co.kr "/:/var/www/www.monotest.co.kr"
    <Location "/">
        Allow from all
        Order allow,deny
        MonoSetServerAlias www.monotest.co.kr
        SetHandler mono
        SetOutputFilter DEFLATE
        SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
    </Location>
    <IfModule mod-deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/java
    </IfModule>
</VirtualHost>

[root@mono httpd]# cd /var/www
[root@www]# mkdir www.monotest.co.kr
[root@www]# cd www.monotest.co.kr
[root@www.monotest.co.kr]# vi HellowMonoDotNet.aspx

<%@ Page Language="C#" AutoEventWireup="true" Title="제목 없음" %>
<%
var message = "HELLOW MONO ASP.NET";
IList<String> list = new List<String> ();
%>
<%=message %>
~



HTTP Restart
[root@mono mod_mono-2.10]# service httpd restart

웹브라우저 확인(호스트 변조 후) - http://www.monotest.co.kr/HellowMonoDotNet.aspx

프로젝트 포팅

설치시 디버깅사항 정리


1. XSP 2.0으로만 실행되는 현상
   VirutalHost 설정후 설정파일내 XSP4.0 실행으로 변경 -
   참조
      본문 아파치설정
      http://www.mono-project.com/Mod_mono
      http://www.integratedwebsystems.com/2011/06/get-mvc3-razor-running-on-mono/
2. XSP4.0 실행시 오류
  4.0 폴더 실행되는부분 4.5폴더 실행으로 변경

3. 실행에러 : Assemble 파일은 찾지 못하는 오류 발생
                 System.Data.Entity, System.Web.Helpers, System.Web.Mvc, System.Web.Routing, System.Web.WebPages 등에 대한 로컬 복사 옵션 True 설정

4. Web.Config 내 ConnectionStrings 설정추가시 오류 - ConnectionStrings 구문 오류 ㅠㅠ

5. ~/Views/Company/About.aspx 찾지 못하는 오류 발생
   EntityFramework 로 생성되는 객체 생성 시 오류 발생 - 해당 부분에 대한 오류 포인트 재 확인 필요

   Invalid IL code in System.Data.Objects.DataClasses.ComplexObject:.ctor (): method body is empty. 에러 등

        - 5.1. Ststem.Data.Entity 로컬복사로 배포 시도 -> 실패
          2014-04-21 : method body is empty
        - 5.2. Edmx to Simple Model Object : Convert String in Edmx.cs files -> 성공
          ReportPropertyChanging( => //ReportPropertyChanging(
          ReportPropertyChanged(  => //ReportPropertyChanged(
          StructuralObject.SetValidValue(value =>  value; //StructuralObject.SetValidValue(value
          StructuralObject.GetValidValue(_lvalue) => _lvalue; //StructuralObject.GetValidValue(_lvalue)
          StructuralObject.GetValidValue(_IMAGE) => _IMAGE; //StructuralObject.GetValidValue(_IMAGE)
          : ComplexObject => // : ComplexObject
          : EntityObject => // : EntityObject
        - 5.2. 현재 프로젝트를 Entity Framework 6.1으로 버전업 시도 - VisualStudio2013 이상 설치 필요

6. ClientScript 오류 발생 : System.Data.Extention 을 localCopy 하면서 발생

7. Failed to create shared memory segment for backend 'XXGLOBAL'
8. Charset 문제 발생 : 일부문자 깨짐 현상, (Db에서 가져오는 데이터 중 일부 깨짐, 일부 정상)
    //byte[] data = Encoding.Default.GetBytes(_strString);
  //int length = Encoding.Default.GetBytes(_strString).Length;
  byte[] data = Encoding.GetEncoding(949).GetBytes(_strString);

  int length = Encoding.GetEncoding(949).GetBytes(_strString).Length;

9. 한글파일 문제 - 해결불가 파일명 변경 필요
    "Test/VUC_테스트";  ==> "Test/VUC_Test";

10. 들어오는 TDS(Tabular Data Stream)의 RPC(원격 프로시저 호출) 프로토콜 스트림이 잘못되었습니다
     이럴경우 대부분 파라미터의 크기를 명확하게 지정해 주지 않아서 발생하는 에러이다.
      파라미터의 형타입이 varchar(MAX)일 경우 size는 -1을 주면 된단고도 함.

      실제 해결은
                SqlParameter totalcount = new SqlParameter("@totalcount", SqlDbType.Int);
                totalcount.Direction = ParameterDirection.Output;
                totalcount.Value = 0; // <== 추가로 해결

11. Could not load file or assembly 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
      localcopy 로 처리
12. 스칼라 변수 "@boardCode"을(를) 선언해야 합니다.     -> Count 시에 기 셋팅되어 있는 @boardCode 에 대해 리스트 쿼리시에 재 셋팅으로 해결
     스칼라 변수 "@edu_code"을(를) 선언해야 합니다.
     -> Count 시에 기 셋팅되어 있는 @edu_code 에 대해 리스트 쿼리시에 재 셋팅으로 해결
     스칼라 변수 "@yn_flag"을(를) 선언해야 합니다.

13. javascript 구문에 주석문 있는경우 <%= a%> c# 스트링으로 표시됨<script type="text/javascript" language="javascript">
<!-- 제거
    function searchClick() {
        $("#no").val(1);
        $("#form1").submit();
        return false;
    }
    function viewClick(bNo) {
        $("#b_code").val(bNo);
        $("#form1").attr('action', '<%=Url.Action("HighPeopleView","Highpeople")%>')
        $("#form1").submit(); return false;
    }
--> 제거
</script>
14. autoComplete.js 500Error
     javascript 파일의 대소문자 구별하여 발생하는 오류