2013-04-27 65 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

相關問題