6

这是一个非常简单的代码,它生成一个可以从可移植类库中引用的 dll,但是,它很容易出错,因为当我添加任何引用时,它接受不可移植的引用。如何确定我要生成的内容在便携式配置文件中?,这是代码:

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);
            }
        }
    }
}
4

2 回答 2

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 扩展)或 Visual Studio 2012。

于 2013-04-27T16:05:00.427 回答
0

我相信 Paulo 会问是否可以在 Silverlight/便携式应用程序中使用 Roslyn。答案是否定的,Roslyn 目前只能在完全信任的桌面 CLR 上工作。这当然是我们希望在未来启用的东西。

于 2013-05-13T02:33:31.040 回答