這是一個非常簡單的代碼,它生成一個可以從可移植類庫中引用的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);
}
}
}
}
謝謝Immo,我想它現在也適用於Silverlight,現在如果我想在客戶端生成程序集,Roslyn是否可以在Silverlight內編譯? – 2013-04-29 19:08:56
爲了編譯PLC,您需要有參考程序集。鑑於參考組件需要安裝定位包或Visual Studio,它基本上需要開發人員機器。所以在一般情況下,我會說答案是否定的。爲什麼要在客戶端上編譯PCL?看起來如果這個程序集僅用於客戶端,它也可能是平臺特定的,也就是說你可以直接針對Silverlight進行編譯。 – 2013-04-29 19:46:38
是的,我的瀏覽器外應用程序已經包含所有需要編譯的dll,包括asyc定位包或任何其他。我需要動態編譯代碼的原因是因爲有一些來自服務器的驗證規則。如果客戶端無法編譯,Roslyn藝術的當前狀態似乎已經變成了一半(我確信Eric Lippert想要打破我的雙腿)。 – 2013-04-30 12:29:33