这是一个非常简单的代码,它生成一个可以从Portable类库中引用的dll,但是,它很容易出错,因为当我添加任何引用时它接受非可移植引用。 我怎样才能确定我正在尝试生成的内容是在Portable profile上? 这是代码:
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);
}
}
}
}
答案 0 :(得分:5)
是。可移植类库(PCL)作为一个概念对编译器是透明的。它基本上只是一个项目系统和参考组件功能。如果要创建一个可定位的可移植类库,例如.NET for 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。
答案 1 :(得分:0)
我相信Paulo在询问是否可以在Silverlight /便携式应用中使用Roslyn。答案是否定的,Roslyn目前只对桌面CLR完全信任。这肯定是我们未来想要实现的目标。