이것은 휴대용 클래스 라이브러리에서 참조 할 수있는 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);
}
}
}
}
Immo, Silverlight와 유사하게 적용됩니다. 클라이언트에서 어셈블리를 생성하려면 Roslyn이 Silverlight에서 컴파일 할 수 있습니까? –
PLC를 컴파일하려면 참조 어셈블리가 필요합니다. 참조 어셈블리가 대상 팩 또는 Visual Studio를 설치해야하는 경우 기본적으로 개발자 컴퓨터가 필요합니다. 그래서 일반적인 경우에는 대답이 '아니오'라고 말하고 싶습니다. 왜 클라이언트에서 PCL을 컴파일하고 싶습니까? 이 어셈블리가 클라이언트에서만 사용되는 경우 플랫폼과 관련 될 수도 있습니다. 즉 Silverlight에 대해 직접 컴파일 할 수 있습니다. –
예, 브라우저 외부 앱에 이미 asyc 타겟팅 팩이나 기타를 포함하여 컴파일에 필요한 모든 dll이 있습니다. 동적 컴파일 된 코드가 필요한 이유는 서버에서 오는 유효성 검사 규칙이 있기 때문입니다. Roslyn의 예술의 현재 상태는 클라이언트에서 컴파일 할 가능성이 없다면 절반 구운 것 같습니다 (Eric Lippert가 내 다리를 부러 뜨릴 것이라고 확신합니다). –