小编use*_*817的帖子

Roslyn - CSharpCompilation

我正在使用CSharpCompilation该类来编译SyntaxTree根是类声明的位置.我向构造函数传递一个CSharpCompilationOptions包含我的using语句的对象.

我的理解是语法树将使用我传递的任何using语句的上下文进行编译.但是当试图访问一个'usings'中定义的类时,我传递给options对象,我得到一个错误,说它在当前上下文中不存在.

我显然做错了什么.有人知道传递给CSharpCompilationOptions班级时的使用清单是什么?

这是代码:

public static void TestMethod()
    {
        string source = @"public class Test
{
    public static void TestMethod()
    {
        string str = Directory.GetCurrentDirectory();
    }
}";
        SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(source);

        List<string> usings = new List<string>()
        {
            "System.IO", "System"
        };
        List<MetadataFileReference> references = new List<MetadataFileReference>()
        {
            new MetadataFileReference(typeof(object).Assembly.Location),
        };   

        //adding the usings this way also produces the same error
        CompilationUnitSyntax root = (CompilationUnitSyntax)syntaxTree.GetRoot();
        root = root.AddUsings(usings.Select(u => SyntaxFactory.UsingDirective(SyntaxFactory.IdentifierName(u))).ToArray());
        syntaxTree = CSharpSyntaxTree.Create(root);

        CSharpCompilationOptions …
Run Code Online (Sandbox Code Playgroud)

c# roslyn

10
推荐指数
1
解决办法
3682
查看次数

实体框架 - 通过更改外键来更新关系

我有以下两个模型和DbContext:

    public class TestDbContext : DbContext
    {
        public IDbSet<Person> People { get; set; }
        public IDbSet<Car> Cars { get; set; }
    }

    public class Person
    {
        public Person()
        {
            ID = Guid.NewGuid();
        }

        public Guid ID { get; set; }
        public string Name { get; set; }
        public virtual List<Car> Cars { get; set; }
    }

    public class Car
    {
        public Car()
        {
           ID = Guid.NewGuid();
        }

        public Guid ID { get; set; }
        public string Name { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# orm entity-framework relational-database entity-framework-5

8
推荐指数
1
解决办法
2万
查看次数

Roslyn - 在SyntaxNode上调用ToString而不保留优先级

如果我创建两个int文字的二进制添加表达式(addExpression),如下所示:

BinaryExpressionSyntax addExpression = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression,
                                            SyntaxFactory.LiteralExpression
                                            (SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(10)),
                                            SyntaxFactory.LiteralExpression
                                            (SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(100)));   
Run Code Online (Sandbox Code Playgroud)

..然后是二进制乘法表达式,其中left是addExpression,right是int literal

BinaryExpressionSyntax multExpression = SyntaxFactory.BinaryExpression(SyntaxKind.MultiplyExpression,
                                         addExpression,
                                         SyntaxFactory.LiteralExpression
                                         (SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(5)));   
Run Code Online (Sandbox Code Playgroud)

呼叫multExpression.ToString()输出10+100*5.我希望它输出(10+100)*5.
这是正确的行为吗?

c# roslyn

7
推荐指数
1
解决办法
377
查看次数

MSBuildWorkspace.Create() - 支持的语言为零

我使用roslyn Formatter.Format()方法格式化一些c#.

其中一个参数采用Workspace可以使用的对象创建MSBuildWorkspace.Create().

但是,当我运行代码时,我得到一个运行时异常,因为工作区返回时没有支持的语言.如果我在控制台应用程序中运行它,它工作正常.

有任何想法吗?

c# roslyn

6
推荐指数
1
解决办法
247
查看次数

Roslyn - 更改SyntaxToken或SyntaxNode的TextSpan

有没有办法创建SyntaxTokenSyntaxNode更改FullSpan属性?

由于所有类都是密封的,不可变的并且没有可访问的构造函数,因此创建一个类的唯一方法是使用SyntaxFactory静态方法,这些方法没有重载来指定位置.

我正在编写一个解析为Roslyn的脚本语言SyntaxTree.当使用访问者模式检查表达式的语义时,我希望能够通过将节点映射到某个位置来告诉用户错误发生的位置.

反正呢?提前致谢.

c# roslyn

6
推荐指数
1
解决办法
1051
查看次数

Roslyn - 名称空间

谁能说出这个Syntax类的命名空间?
我已经通过nuget安装了所有roslyn包,但我不知道用于创建表达式语法对象的静态工厂方法的名称空间.

Web上的许多Roslyn示例都使用这些命名空间

using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;   
Run Code Online (Sandbox Code Playgroud)

现在这些已经过时了吗?我使用以下内容

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这个区别吗?

c# roslyn

1
推荐指数
1
解决办法
1011
查看次数