2013-04-27 2 views
6

이것은 휴대용 클래스 라이브러리에서 참조 할 수있는 dll을 생성하는 매우 간단한 코드이지만, 참조를 추가 할 때 휴대용이 아닌 참조를 허용하기 때문에 오류가 발생하기 쉽습니다.Roslyn을 사용하여 Portable 클래스 라이브러리를 만들 수 있습니까?

using System.IO; 
using Roslyn.Compilers; 
using Roslyn.Compilers.CSharp; 

namespace Ros1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      SyntaxTree tree = SyntaxTree.ParseText(
@"using System; 

namespace HelloWorld 
{ 
    public class A 
    { 
     public int Sum(int a, int b) 
     { 
      return a + b; 
     } 
    } 
}"); 
      var co = new CompilationOptions(OutputKind.DynamicallyLinkedLibrary); 
      var compilation = Compilation.Create("HelloWorld", co) 
           .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib")) 
           .AddSyntaxTrees(tree); 

      using (var file = new FileStream("Sum.dll", FileMode.Create)) 
      { 
       compilation.Emit(file); 
      } 
     } 
    } 
} 

답변

5

예 : 나는 내가 무엇을 생성하기 위해 노력하고있어 휴대용 프로필에 있는지 확실히 알 수있는 방법? 다음은 코드입니다. 개념으로서의 휴대용 클래스 라이브러리 (Portable Class Library, PCL)는 컴파일러에게 투명합니다. 기본적으로 프로젝트 시스템 및 참조 어셈블리 기능입니다. 당신이 대상으로하는 휴대용 클래스 라이브러리를 만들려면,이 폴더에있는 어셈블리에 컴파일해야, 윈도우 스토어 앱 및 .NET 4.5 .NET 말 :

모든 프로필 폴더는 하위 디렉토리라고했다
%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7 

SupportedFrameworks하는 그것이 어떤 프레임 워크를 지원하는지 나타냅니다.

Visual Studio에서 PCL 작업을 훌륭하게 수행하려면 TargetFrameworkAttribute도 포함시켜야합니다. 버전 및 프로필이 올바르게 설정되어 있는지 확인하십시오. 당신이 위의 예는

[assembly: TargetFramework(".NETPortable,Version=v4.5,Profile=Profile7", 
          FrameworkDisplayName=".NET Portable Subset")] 

를해야 들어 당신이합니다 (PCL extension installed 포함) 비주얼 스튜디오 2010 또는 Visual Studio의 설치가 필요합니다, 그래서 우리는 비주얼 스튜디오의 외부에서 이러한 어셈블리를 제공 생각하지 않는다 2012

+0

Immo, Silverlight와 유사하게 적용됩니다. 클라이언트에서 어셈블리를 생성하려면 Roslyn이 Silverlight에서 컴파일 할 수 있습니까? –

+0

PLC를 컴파일하려면 참조 어셈블리가 필요합니다. 참조 어셈블리가 대상 팩 또는 Visual Studio를 설치해야하는 경우 기본적으로 개발자 컴퓨터가 필요합니다. 그래서 일반적인 경우에는 대답이 '아니오'라고 말하고 싶습니다. 왜 클라이언트에서 PCL을 컴파일하고 싶습니까? 이 어셈블리가 클라이언트에서만 사용되는 경우 플랫폼과 관련 될 수도 있습니다. 즉 Silverlight에 대해 직접 컴파일 할 수 있습니다. –

+0

예, 브라우저 외부 앱에 이미 asyc 타겟팅 팩이나 기타를 포함하여 컴파일에 필요한 모든 dll이 있습니다. 동적 컴파일 된 코드가 필요한 이유는 서버에서 오는 유효성 검사 규칙이 있기 때문입니다. Roslyn의 예술의 현재 상태는 클라이언트에서 컴파일 할 가능성이 없다면 절반 구운 것 같습니다 (Eric Lippert가 내 다리를 부러 뜨릴 것이라고 확신합니다). –

0

Paulel이 Silverlight/휴대용 앱에서 Roslyn을 사용할 수 있는지 여부를 묻습니다. 대답은 '아니오'입니다. Roslyn은 현재 데스크톱 CLR에 대한 전적인 신뢰 만 가지고 있습니다. 그것은 우리가 미래에 가능케 할 것이 확실한 것입니다.

+0

아니오; Roslyn을 사용하여 휴대용 어셈블리를 만들고 싶습니다. – SLaks

관련 문제