2009-07-29 2 views
0

첫째, Silverlight 프로젝트는 Windows 클래스 라이브러리 나 Asp.net MVC 프로젝트와 같은 Silverlight가 아닌 프로젝트를 참조 할 수 없다는 것을 알고 있습니다. 하지만 Silverlight 기반 프로젝트 & Asp.net MVC 프로젝트를 모두 지원할 수있는 프로젝트를 만들어야합니다.VS.net 2008에서 .Net 3.5 기반 프로젝트로 Silverlight 3 클래스 라이브러리를 참조 할 수 있습니까?

그래서 공유 소스 코드로 Silverlight 기반 프로젝트를 만들었습니다. VS.net 2008 & .Net 3.5 SP1에서 제대로 작동합니다. 그러나 .NET 기반 프로젝트에서 Silverlight 기반 프로젝트의 일부 메서드를 사용하려고하면 다음 코드와 같은 오류가 발생합니다.

실버 라이트 기반의 방법

public static void InitializeInstance(object obj) 
{ 
    // Initialize Field Value 
    foreach (FieldInfo fi in obj.GetType().GetFields()) 
    { 
     foreach (Attribute attr in fi.GetCustomAttributes(true)) 
     { 
      if (attr is DefaultValueAttribute) 
      { 
       DefaultValueAttribute dv = (DefaultValueAttribute)attr; 
       fi.SetValue(obj, dv.Value); 
      } 
     } 
    } 

    // Initialize Property Value 
    foreach (PropertyInfo pi in obj.GetType().GetProperties()) 
    { 
     foreach (Attribute attr in pi.GetCustomAttributes(true)) 
     { 
      if (attr is DefaultValueAttribute) 
      { 
       DefaultValueAttribute dv = (DefaultValueAttribute)attr; 

       if (pi.CanWrite) 
       { 
        pi.SetValue(obj, dv.Value, null); 
       } 
      } 
     } 
    } 
} 

닷넷 기반의 방법

private void Form1_Load(object sender, EventArgs e) 
{ 
    InitializeInstance(this); 
} 

오류 상세

System.IO.FileNotFoundException : 파일 또는 어셈블리를로드 할 수 없습니다. 'System, Version = 2.0.5.0, Culture = 중립, PublicKeyToken = 7cec85d7bea7798e'또는 종속성 중 하나입니다. 시스템 은 지정된 파일을 찾을 수 없습니다. 파일 이름 : '시스템, 버전 = 2.0.5.0, 문화 = PublicKeyToken = 7cec85d7bea7798e 중립'

마지막으로, 나는의 System.dll을 복사하여이 문제를 해결하려고 InitializeInstance (개체 OBJ)에서 디렉토리를 출력하고 참조하기위한 Silverlight. 여전히 같은 오류를 보여줍니다. 그래서,이 오류는 양쪽 모두의 제한 일 수 있다고 생각합니다. & Silverlight 플랫폼. 이 문제를 피하기위한 아이디어가 있습니까?

추신. 몇 가지 공유 코드로 this technique을 사용할 수 있다는 것을 알고 있습니다. 그러나 내 프로젝트에이 작업을 수행하는 것은 불가능합니다. 그것은 매우 복잡하기 때문에 &은 Silverlight 기반 또는 .Net 기반 클래스 라이브러리를 직접 작성하는 것보다 훨씬 복잡합니다. 데스크톱 CLR에 실버, PresentationFramework 또는 PresentationCore에 System.Windows :

덕분에,

+0

나는 System.dll에 포함 된 모든 클래스를 제거하여이 문제를 해결하려고합니다. 잘 작동합니다. 그러나 나는 이해하지 못한다. 일부 클래스 (System.Core.dll에 포함되어 있음)가 System.dll과 같은 오류를 발생시키지 않는 이유는 무엇입니까? –

+0

파일 링크를 사용하는 것이 좋습니다. 어떤 특정 유형의 코드 또는 복잡한 개체가 당신을 위해 작동하지 않는 파일 링크 방법을 사용하여 포함 시키려고합니까? –

답변

1

여기서 문제는 그 유형이 다른 강력한 이름으로 어셈블리를 공유 할 것입니다.

런타임시 의도 한 유형을로드 할 수 없으며 Silverlight에서 데스크톱 유형에 대한 유형 전달자가 없습니다.

내 권장 솔루션 동일한 빌드 바이너리를 실제로 참조하는 대신 파일 링크를 사용해보십시오.

MyApp\ 
    Silverlight\ 
    Page.xaml 
    Page.xaml.cs 
    (link) ..\AspMvc\MySharedDataFile.cs 
    AspMvc\ 
    MySharedDataFile.cs 
    MyApp.cs 

이 방법, 소스가 모두 프로젝트를 다시 컴파일됩니다

이 방법, 당신은 다음과 같이 보일 수 있습니다 프로젝트의 소스 구조를 가질 수있다.우리는 이것을 Silverlight Toolkit에서 사용하여 WPF 및 Silverlight 모두에 대한 차트 및 데이터 시각화 컨트롤을 비롯한 많은 컨트롤을 빌드합니다. 이것은 두 플랫폼의 바이너리를 참조하는 대신 각 플랫폼에 맞게 다시 빌드하는 것입니다.

Visual Studio에서 링크를 삽입하려면 프로젝트 또는 해당 폴더 중 하나를 마우스 오른쪽 단추로 클릭하고 기존 항목 추가를 클릭 한 다음 탐색기 열린 파일 대화 상자에서 해당 항목을 찾으십시오. 그러나 버튼을 클릭하는 대신 파일 추가 버튼의 작은 아래쪽 화살표 드롭 다운을 클릭하고 '링크로 추가'옵션을 선택하십시오.

그런 다음 다른 위치에서 파일을 간단하게 빌드하지만 복사본이 아니므로 한 곳에서 유지 관리하고 둘 다 사용할 수 있습니다.

당신은 실제로 새로운 응용 프로그램 도메인을 만들 조립 해상도 이벤트에 후크, 그리고 그 무엇을 볼 수있는 훨씬 더 높은 신뢰입니다 데스크톱 응용 프로그램에서 .NET 반사를 사용할 수 있습니다 미친 솔루션입니다. 대신 데스크톱 CLR에서 유형을 반환하거나이 경고를 표시하지 않을 수 있습니다.

작동하는 경우 단서가 없습니다.

+0

알아. 소스 코드 작성을 위해 파일을 링크 할 수 있습니까? Silverlight 프레임 워크가 아닌 .Net 프레임 워크의 시스템 어셈블리에서 형식 및 메서드를 사용하는 방법? –

관련 문제