2013-04-27 62 views
6

这是一个非常简单的代码,它生成一个可以从可移植类库中引用的dll,但是它很容易出错,因为当我添加任何引用时它会接受非可移植的引用。 我怎样才能知道肯定是我想要生成是在便携式的个人资料? 下面是代码:是否可以使用Roslyn创建一个可移植的类库?

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

是。便携式类库(PCL)作为一个概念对编译器来说是透明的。它基本上只是一个项目系统和参考组件功能。如果你想创建一个便携式类库,能够靶向,说.NET的Windows Store应用程序和.NET 4.5,你应该编译对组件此文件夹中:

%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7 

每个配置文件夹中有一个叫子目录SupportedFrameworks其指出它支持哪些框架。

要使PCL在Visual Studio中很好地工作,还应该包括TargetFrameworkAttribute。确保版本和配置文件设置正确。对于你上面的例子就需要

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

我不认为我们的船,这些组件的Visual Studio之外,所以你需要的Visual Studio 2010(与PCL extension installed)或Visual Studio的安装2012

+0

谢谢Immo,我想它现在也适用于Silverlight,现在如果我想在客户端生成程序集,Roslyn是否可以在Silverlight内编译? – 2013-04-29 19:08:56

+0

为了编译PLC,您需要有参考程序集。鉴于参考组件需要安装定位包或Visual Studio,它基本上需要开发人员机器。所以在一般情况下,我会说答案是否定的。为什么要在客户端上编译PCL?看起来如果这个程序集仅用于客户端,它也可能是平台特定的,也就是说你可以直接针对Silverlight进行编译。 – 2013-04-29 19:46:38

+0

是的,我的浏览器外应用程序已经包含所有需要编译的dll,包括asyc定位包或任何其他。我需要动态编译代码的原因是因为有一些来自服务器的验证规则。如果客户端无法编译,Roslyn艺术的当前状态似乎已经变成了一半(我确信Eric Lippert想要打破我的双腿)。 – 2013-04-30 12:29:33

0

我相信Paulo的问是否可以在Silverlight /便携式应用程序中使用Roslyn。答案是否定的,Roslyn目前只能完全信任桌面CLR。这肯定是我们今后希望实现的。

+0

不;我相信他想用Roslyn创建一个便携式组件。 – SLaks 2013-05-13 02:36:07

相关问题