2009-06-12 7 views
0

두 개의 개별 공급자에서 어셈블리의 피쳐를 intergrate 할 것으로 예상되는 웹 응용 프로그램이 있습니다. 어셈블리의 한 세트 (Set1)는 .NET 2.0에서 빌드되고 다른 어셈블리 (Set2) 어셈블리에서는 절대적으로에는 .NET 3.5가 필요합니다. Set2 어셈블리가 작동하려면 web.config에 (system.codedom) 섹션을 추가하고 v3.5 컴파일러를 지정해야합니다. 그러나 Set1 어셈블리를 참조하는 코드가 중단되는 것 같습니다 (JIT 컴파일러는 영원히 걸리고 요청 시간이 오래 걸립니다). system.codedom 섹션을 제거하면 Set2를 참조하는 응용 프로그램의 일부 기능이 실패합니다.나란히 2.0/3.5 어셈블리

우리는 .NET 2.0과 3.5가 아무런 문제없이 공존 할 수 있다는 지식으로이 프로젝트를 시작했습니다. 이 두 세트의 어셈블리를 멋지게 연출할 수있는 방법이 있습니까?

편집 : 다음은 system.codedom 섹션의 모양입니다.

<system.codedom> 
<compilers> 
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> 
    <providerOption name="CompilerVersion" value="v3.5"/> 
    <providerOption name="WarnAsError" value="false"/> 
    </compiler> 
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> 
    <providerOption name="CompilerVersion" value="v3.5"/> 
    <providerOption name="OptionInfer" value="true"/> 
    <providerOption name="WarnAsError" value="false"/> 
    </compiler> 
</compilers> 

+0

.Net 3.5에서 Set1을 다시 컴파일 할 수 있습니까? –

+0

소스가 없습니다. –

+2

한 응용 프로그램이 2.0으로 실행되고 다른 응용 프로그램이 3.5로 실행되는 한 .NET 2.0과 3.5는 공존 할 수 있으므로 두 개의 런타임이로드됩니다. 하나의 응용 프로그램 (프로세스) 내에서 하나의 버전 만 사용할 수 있습니다. –

답변

1

응용 프로그램 도메인 .NET 2.0에서 시작된 경우에만 .NET 2.0 어셈블리를로드 할 수 있습니다. 응용 프로그램 도메인이 .NET 3.5에서 시작되면 아무 문제없이 .NET 2.0 및 .NET 3.5 어셈블리를로드 할 수 있습니다.

예를 들어 Windows 응용 프로그램 프로젝트를 만들고 대상을 .NET 2.0으로 설정하면 .NET 3.5 어셈블리를로드 할 수 없습니다. 프로젝트를 .NET 3.5로 지정하면 2.0 어셈블리와 3.5 어셈블리가 문제없이로드됩니다.

+0

하지만 system.codedom은 어떨까요? –

+0

중요하지 않습니다. Set1은 .NET 3.5에서 다시 컴파일 할 수없고 Set2를 호출하는 Set1입니다. Set1이 .NET 3.5에서 다시 컴파일되지 않거나 Set2가 .NET 2.0에서 다시 컴파일되지 않는 한, 그 일은 일어나지 않습니다. –

+0

명확하게하기 위해 두 어셈블리 집합은 서로를 호출하지 않으며, 두 어셈블리 집합을 모두 호출하는 App_Code 및 aspx 페이지의 코드를 호출합니다. –

0

.NET 웹 응용 프로그램 (ASP.NET)에는 "3.5 런타임"이 없습니다. ASP.NET 3.5 응용 프로그램은 2.0 런타임에서 실행되며 3.5 "물건"은 컴퓨터에 설치해야하는 라이브러리를 추가 한 것입니다.

이 서버가 실행되는 서버에 3.5가 설치되어 있습니까?

웹 응용 프로그램을 다시 컴파일 하시겠습니까? 또는 설정 파일을 변경 하시겠습니까? 어떤 유형의 프로젝트가 앱입니까? 웹 사이트 프로젝트? 웹 응용 프로그램 프로젝트?

+0

웹 사이트 프로젝트와 컴파일되는 코드는 App_Code 및 aspx 코드 숨김 –

0

CLR은 2.0에서 3.5 사이에서 변경되지 않았습니다. 코어 BCL도 변경되지 않았습니다. 3.0과 3.5는 새로운 것들만 추가합니다 - 이 2.0과 완전히 호환되어야합니다.

See link for more info (red/green bits).

+0

입니다. 너무! 문제가 어디서 발생했는지 알아 내야합니다. –

0

나는 일이 같은 일을 했어,하지만 .NET 3.5/VS2008의 베타 버전을 실행 때이었다. 전에 말했듯이, 3.5는 단지 "애드온 (add-on)"일뿐입니다.

관련 문제