시작

일단 이번 아티클의 SmartClient는 브라우저 임베디드되는 SmartClient를 의미 합니다.
Visual Studio 2003에서는 잘되던것이 2005에는 잘안되는 것이 있습니다. 바로 스크립트 에서 임베디드된 닷넷 어셈블리의 메소드 호출입니다.


안되면 어떤 애러가 나타나나

대충 원인은 이렇습니다. 일반적인 스크립코드로 접근 하기 위해서 아래와 같이 작성을 하지요

<html>     
<head>
   
<script>
       
function aaaa()
        {
           
document.all("control1").Message("Message");
       
}
   
</script>   
</head>
<body>
   
<OBJECT id="control1" name="control1" classid="ClassLibrary1.dll#ClassLibrary1.UserControl1"  VIEWASTEXT></OBJECT>
     
<a href="javascript: aaaa();">a</a> 
</body> 
</html> 
닷넷 코드는 이리 되어 있고요
using System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Drawing;
using
System.Data;
using
System.Text;
using
System.Windows.Forms;

namespace
ClassLibrary1
{
   
public partial class UserControl1 : UserControl
    {

       
public UserControl1()
        {
            InitializeComponent()
;
       
}

       
public void Message(string a)
        {
            MessageBox.Show(a)
;
       
}
    }
}
2003기반에서는 위와 동일한 코드로 아주 잘돌아갑니다. 안되면 이상한거죠 ^^
그런데 2005에 와서보면 작동을 안합니다.


이런 오류가 발생하죠. 해당 오브젝트는 찾아 오는데 어셈블리의 형식을 찾아 오지 못하기때문인거 같습니다.

해결책
이유는 대충 알았고 이제 해결을 하면 됩니다. 해결책은 간단합니다. 먼저 Assemblyinfo.cs파일을 보시면

using System.Reflection;
using
System.Runtime.CompilerServices;
using
System.Runtime.InteropServices;

// 어셈블리의 일반 정보는 다음 특성 집합을 통해 제어됩니다.
// 어셈블리와 관련된 정보를 수정하려면
// 이 특성 값을 변경하십시오.
[assembly: AssemblyTitle("ClassLibrary1")]
[assembly: AssemblyDescription(
"")]
[assembly: AssemblyConfiguration(
"")]
[assembly: AssemblyCompany(
"vsdotnet")]
[assembly: AssemblyProduct(
"ClassLibrary1")]
[assembly: AssemblyCopyright(
"Copyright (C) vsdotnet 2006")]
[assembly: AssemblyTrademark(
"")]
[assembly: AssemblyCulture(
"")]

// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 노출되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
[assembly: ComVisible(false)]

// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("a521db40-daf6-4096-8514-2f2f65dbc7f9")]

// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전

//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로
// 지정되도록 할 수 있습니다.
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion(
"1.0.0.0")]
이거 보고 느낌이 팍 ! 오시는 분 있으신가요 ^^? 중간에 보면 ComVisible의 주석을 관심 있게 보세요 네 그렇기 때문에 안된 것이군요 true로 바꿔주면 이제 잘작동합니다. 2003을 확인해 봤는데 저 속성 자체가 빠져 있더군요. 아마도 쓸때없이 모든 객체들이 com등록되는 것을 막과 필요한 것만 등록하라는 의미인거 같습니다. ^^

+ Recent posts