标签: roslyn

C#6.0 TFS构建

我正在尝试在Visual Studio 2015 CTP中使用C#6.0的新功能,而我的项目无法在TFS 2013和Visual Studio Online中构建.

我知道Visual Studio使用新的Roslyn编译器,它取代了原生的.NET编译器,因此TFS构建代理无法编译.

我的问题是如何在构建代理上(以及在Visual Studio Online中)安装Roslyn并告诉构建代理使用此编译器而不是本机?

tfs roslyn c#-6.0 visual-studio-2015 azure-devops

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

Roslyn特征/模式分支(C#7) - 如何启用实验语言功能

我想尝试一下潜在的C#7未来语言功能.

我有一个虚拟机,我已经下载了Roslyn代码库(功能/模式分支),并按照Roslyn的github上的描述构建:在Windows上构建和测试.

我可以成功启动一个新的Visual Studio实验实例(将VisualStudioSetup设置为启动项目并运行).

当我尝试新的语言功能(模式匹配和本地函数)时,我在编辑器中出现错误,当我构建时出现错误和错误:

模式匹配错误波浪形

局部功能错误波浪形

错误CS8058功能"本地功能"是实验性的,不受支持; 使用'/ features:localFunctions'来启用.

错误CS8058功能'模式匹配'是实验性的,不受支持; 使用'/ features:patterns'启用.

我在哪里提出这些选择?

我尝试将它添加到命令行参数,但我收到一个错误.

罗斯琳阿格斯

Roslyn Args错误

c# roslyn c#-7.0

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

是否有可能像立即一样在C#Interactive(REPL)中自动输出值?

我开始使用C#Interactive,就像我可以浏览和探索一些API功能,就像我一样,Immediate无需运行和调试我的程序.

问题是,除非我使用变量名执行命令,否则它不会像立即那样输出信息:

 > string.Format("{0,15}", 10m);         //hit enter, here there is no output
 > var a = string.Format("{0,15}", 10m); //hit enter so...
 > a                                     // hit enter and...
  "        10"                           //...here the value is shown
 >
Run Code Online (Sandbox Code Playgroud)

有没有办法C# Interactive在每个评估中输出值,就像Immediate那样(并且没有为此编写更多代码Console.Write)?

c# read-eval-print-loop roslyn visual-studio-2015 c#-interactive

18
推荐指数
2
解决办法
2981
查看次数

RyuJIT和Roslyn有什么区别?

据我所知,RyuJIT比JIT更快.但它是.NET 4.6的新标准还是Roslyn?

或者,当您需要在编译过程中公开API时,是否使用了Roslyn?

我对他们的目的和他们将要找到的框架感到困惑.有人可以解释这些差异,当你想要一个超过另一个时,请?

.net roslyn ryujit

18
推荐指数
3
解决办法
5481
查看次数

无法从使用中推断出打开泛型类型参数

在这个问题中,当提到编译器时,我实际上指的是Roslyn编译器.使用IntelliSense时出现问题,IntelliSense被认为是相同的编译器.

出于演示目的和完整性,使用以下类(使用Visual Studio 2015与C#6.0和.NET 4.6.1):

public class A
{
    public IEnumerable<B> B { get; set; }
}
public class B
{
    public IEnumerable<C> C { get; set; }
}
public class C { }
public class Helper<T> { }
Run Code Online (Sandbox Code Playgroud)

请看以下扩展方法:

public static void FooBar<T1, T2>(
    this Helper<IEnumerable<T1>> helper,
    Expression<Func<T1, IEnumerable<T2>>> expression) { ... }
Run Code Online (Sandbox Code Playgroud)

编译器能够在消耗时推断它,如下所示:

Helper<IEnumerable<B>> helper = ...;
helper.FooBar(l => l.C); //T1 is B and T2 is C
Run Code Online (Sandbox Code Playgroud)

还有这个重载的扩展方法:

public static …
Run Code Online (Sandbox Code Playgroud)

.net c# generics roslyn visual-studio-2015

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

用于.NET Core的新.csproj格式的Roslyn工作区

我一直致力于使用Roslyn的工作空间API来加载项目的VS Code扩展,此时扩展project.json通过包中的ProjectJsonWorkspace类型支持.NET Core的旧格式Microsoft.DotNet.ProjectModel.Workspaces.

随着新的工具更改即将发布,我很想支持新的.csproj构建格式,但似乎无法找到支持它的.NET Standard兼容工作区.

我的理解是,因为它正在使用MSBuild,我将需要使用MSBuild(Microsoft.CodeAnalysis.MSBuild)包,但此时它不支持.NET Standard.

如果存在,或者我是否必须考虑创建自己的工作区实现,最佳解决方案是什么?

roslyn .net-core

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

用Roslyn获取'var'的类型?

我有一个名为'test.cs'的.cs文件,它基本上是这样的:

namespace test
{
    public class TestClass
    {
        public void Hello()
        {
            var x = 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图用Roslyn解析这个并得到x的类型,它应该是'int',但我只能发现它是'var'类型,我似乎无法获得实际的底层类型.

这基本上就是我现在的代码

var location = "test.cs";
var sourceTree = CSharpSyntaxTree.ParseFile(location);

var root = (CompilationUnitSyntax)sourceTree.GetRoot();
foreach (var member in root.Members)
{
    //...get to a method
    var method = (MethodDeclarationSyntax())member;
    foreach (var child in method.Body.ChildNodes())
    {
        if (child is LocalDeclarationStatementSyntax)
        {
            //var x = 1;
            child.Type.RealType()?
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到真正的孩子?我已经看到一些事情说我应该使用SemanticModel或Solution或Workspace,但我似乎无法找到如何使用Roslyn加载我的测试解决方案然后获得'x'的类型.

此外,我还没有找到任何非常好的Roslyn文档,它似乎都散布在一堆不同的版本中,对于像我这样的初学者来说没什么.有没有人知道我可以阅读的"Roslyn简介"或类似的快速入门?

.net c# roslyn

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

MSBuildWorkspace.Create()抛出异常

我有Visual Studio 2013.我也安装了MSBuild Tools 2013.以下代码给了我例外

var workspace=MSBuildWorkspace.Create();
Run Code Online (Sandbox Code Playgroud)

这是例外

无法加载文件或程序集'Microsoft.Build,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.

我究竟做错了什么 ?

roslyn

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

如何从FieldDeclarationSyntax节点获取Roslyn FieldSymbol?

我正在尝试使用Roslyn来确定项目公开的API(然后使用这些信息做一些进一步的处理,所以我不能只使用反射).我正在使用SyntaxWalker访问声明语法节点,并为每个节点调用IModel.GetDeclaredSymbol.这似乎适用于方法,属性和类型,但它似乎不适用于字段.我的问题是,如何为FieldDeclarationSyntax节点获取FieldSymbol?

这是我正在使用的代码:

        public override void VisitFieldDeclaration(FieldDeclarationSyntax node)
        {
            var model = this._compilation.GetSemanticModel(node.SyntaxTree);
            var symbol = model.GetDeclaredSymbol(node);
            if (symbol != null
                && symbol.CanBeReferencedByName
                // this is my own helper: it just traverses the publ
                && symbol.IsExternallyPublic())
            {
                this._gatherer.RegisterPublicDeclaration(node, symbol);
            }

            base.VisitFieldDeclaration(node);
        }
Run Code Online (Sandbox Code Playgroud)

c# roslyn

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

Roslyn抛出不支持语言'C#'

我创建了一个类库项目并进行了一些处理,并使用Roslyn生成代码.

我在WPF GUI应用程序中使用该库作为参考.

这些是NuGet包:

在此输入图像描述

Build显示没有错误,但是当我使用以下代码时:

private static void GetGenerator()
{
  workspace = new AdhocWorkspace();
  generator = SyntaxGenerator.GetGenerator(workspace, LanguageNames.CSharp);
}
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

"不支持语言'C#'."

   at: Microsoft.CodeAnalysis.Host.HostWorkspaceServices.GetLanguageServices(String languageName)
   at: Microsoft.CodeAnalysis.Host.Mef.MefWorkspaceServices.GetLanguageServices(String languageName)
   at: Microsoft.CodeAnalysis.Editing.SyntaxGenerator.GetGenerator(Workspace workspace, String language)
Run Code Online (Sandbox Code Playgroud)

根据这个这个,我必须在本地复制CodeAnalysis文件并添加必要的引用.他们在那里,但错误发生.

这仍然是去年没有修复的错误吗?

我还该怎么办?

c# roslyn

17
推荐指数
2
解决办法
2338
查看次数