这是一个非常简单的代码,它生成一个可以从可移植类库中引用的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