2013-04-27 9 views
6

Bu, Taşınabilir sınıf kitaplığından başvurulan bir dll oluşturan çok basit bir koddur, ancak, herhangi bir başvuru eklediğimde, taşınabilir olmayan başvuruları kabul ettiğinden, bu, eğilimli bir hatadır.Roslyn ile bir taşınabilir sınıf kütüphanesi oluşturmak mümkün mü?

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); 
      } 
     } 
    } 
} 

cevap

5

Evet: Ben ne üretmek için çalışıyorum Taşınabilir profilde olduğunu kesin söyleyebilir nasıl ?, İşte kodudur. Taşınabilir Sınıf Kütüphaneleri (PCL) bir kavram olarak derleyiciye şeffaftır. Temel olarak bir proje sistemi ve referans montajları sadece özelliği. hedefleyen bir taşınabilir sınıf kitaplığı oluşturmak istiyorsanız, bu klasördeki meclisleri karşı derlemek gerekir Windows Mağazası uygulamaları ve .NET 4.5 için .NET ki:

Her profil klasörü bir alt dizin çağırdı
%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7 

SupportedFrameworks hangi hangi çerçeveleri desteklediğini gösterir.

PCL'nin Visual Studio'da mükemmel çalışmasını sağlamak için, TargetFrameworkAttribute'u da eklemelisiniz. Sürüm ve profilin doğru şekilde ayarlandığından emin olun. Yukarıdaki örnekte

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

gerekir için sana (PCL extension installed ile) Visual Studio 2010 veya Visual Studio yüklemesi gerekir bu yüzden, Visual Studio dışında bu derlemeleri gemi sanmıyorum 2012.

+0

Teşekkür ederim Immo, sanırım, Silverlight'a benzer şekilde uygulanır, şimdi eğer müşteri üzerinde montaj üretmek istersem, Roslyn Silverlight içinde derlemek mümkün olur mu? –

+0

Bir PLC'yi derlemek için referans derlemelerine sahip olmanız gerekir. Referans derlemelerin ya bir hedefleme paketi veya kurulacak Visual Studio'yu gerektirdiği göz önüne alındığında, temel olarak bir geliştirici makinesi gerektirir. Yani genel durumda cevabın hayır olduğunu söyleyebilirim. PCL'yi neden istemcide derlemek istiyorsunuz? Bu montaj sadece istemcide kullanılıyorsa, aynı zamanda platforma özgü olabilir, yani doğrudan Silverlight'a karşı derleme yapabilirsiniz. –

+0

Evet, benim tarayıcı uygulaması dışında, asyc hedefleme paketi veya başka herhangi bir şey dahil olmak üzere derlemek için gereken tüm dosyaları zaten vardı. Dinamik olarak derlenmiş kodlara ihtiyacımın nedeni, sunucudan gelen bazı doğrulama kuralları olmasıdır. Roslyn sanatının şu anki durumu, müşteriyi derlemek mümkün değilse, yarısı pişmiş (Eric Lippert'in bacaklarımı kırmak istediğine eminim) görünüyor. –

0

Paulo'nun bir Silverlight/taşınabilir uygulamasında Roslyn kullanmanın mümkün olup olmadığını sorduğuna inanıyorum. Cevap hayır, Roslyn şu anda sadece masaüstü CLR'de tam güven ile çalışıyor. Gelecekte etkinleştirmek istediğimiz kesinlikle bir şey.

+0

Hayır; Roslyn kullanarak taşınabilir bir montaj yapmak istediğine inanıyorum. – SLaks