标签: roslyn

在C#6中指定字符串插值的语言环境(Roslyn CTP6)

C#6中的字符串插值让我写:

decimal m = 42.0m;
string x = $"The value is {m}";
Run Code Online (Sandbox Code Playgroud)

但是,字符串格式化的一个非常常见的用例是指定用于格式化值的语言环境.假设我需要InvariantCulture用于上面的格式化操作,那是什么语法?

这个讨论表明我应该能够做到这一点:

string x = INV($"The value is {m}");
Run Code Online (Sandbox Code Playgroud)

其中INV定义为

public static string INV(IFormattable formattable)
{
    return formattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture);
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.它编译,但它启动时我的程序挂在cmd.exe中 - 好像我假设正在调用klr.exe,挂起(编译器错误?)

这是VS15 CTP 6中的ASP.NET 5控制台项目.

c# string-interpolation roslyn c#-6.0

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

无法删除\ bin\roslyn\VBCSCompiler.exe - 访问被拒绝

我正面临一个来自roslyn编译器的奇怪问题.有时当我构建解决方案时,我在错误列表中面临一个奇怪的问题,这不会让我构建解决方案.这是错误:

严重级代码说明项目文件行抑制状态错误无法将文件"D:\ Sealogical New Website\SealogicalWebsite\packages\Microsoft.Net.Compilers.1.0.0\tools\csc.exe"复制到"bin\roslyn\csc.exe" ".访问路径'bin\roslyn\csc.exe'被拒绝.SealogicalWebsite

严重级代码说明项目文件行抑制状态错误无法将文件"D:\ Sealogical New Website\SealogicalWebsite\packages\Microsoft.Net.Compilers.1.0.0\tools\VBCSCompiler.exe"复制到"bin\roslyn\VBCSCompiler.exe" ".访问路径'bin\roslyn\VBCSCompiler.exe'被拒绝.SealogicalWebsite

  1. 我尝试清理解决方案并重建它但不再工作.

  2. 试图手动删除文件,但再次显示错误指出我没有权限执行此操作:

  3. 尝试删除CMD但再次显示相同的错误:

尝试手动删除文件时的图像

删除roslyn生成的文件的唯一方法是重新启动PC,重启后我可以手动删除它们没有问题.

我是我的电脑的管理员,所以我猜没有问题.

这个问题似乎发生在Visual Studi0 2015和Visual Studio 2017中.

我不喜欢每天重启PC 4-5次或更多,这就是我在这里问的原因.

其他一些细节:

  • 我是创建这个项目的人,所以理论上做这个动作应该不是问题.

  • 当项目第一次创建时,我确实以管理员模式运行Visual Studion,正如我现在所做的那样.

  • 我在我的项目中使用ASP.MVC 5模板.
  • 不被删除的文件是bin/roslyn/cscbin/roslyn/VBCSCompiler.

我可以找到一个从web.config中删除此部分的解决方案,因此它不会生成这些文件:

<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案会导致新的c#6功能出现问题,所以我无法删除此部分.....

此外,我在CMD中尝试了这个命令来查看是否存在锁定此文件的进程,但无论如何它根本没有显示任何进程:

C:\WINDOWS\system32>tasklist /m D:\SealogicalNewWebsite\SealogicalWebsite\SealogicalWebsite\bin\roslyn\csc.exe
INFO: No tasks are running which match the specified criteria. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc roslyn visual-studio-2015 visual-studio-2017

56
推荐指数
3
解决办法
2万
查看次数

罗斯林跨平台吗?

我已经看了很长一段时间罗斯林,我很好奇并且很兴奋.我注意到的一件事是他们提到编译器是用托管代码重写的.这引发了一个问题,即Roslyn是否能够在非.NET虚拟机上运行,​​例如Mono.

真的很想在我的视频游戏中使用Roslyn嵌入C#脚本,并在我的应用程序中使用它们的许多其他功能,但我想知道使用Roslyn是否会破坏它在Mono上运行的能力.

有人试过在Mono上运行Roslyn吗?可能吗?为什么或者为什么不?

为了澄清,我对托管程序集是否可以在Mono上运行以及它是否可以生成单声道可以运行的程序集感兴趣.

c# mono roslyn

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

降低了在罗斯林的运营

当在Roslyn中引入操作时,其中一个目标是提供降低的操作(我认为这是在设计审查会议视频中),据我所知,应该为高级别的隐式编译器操作提供显式操作.我在Roslyn看到了Lowering目录,但是那里的类是内部的.现在可以降低操作或没有公共API可用吗?

在下面的示例中,已经删除了一些隐式部分 - 为表达式主体添加return语句并为重载运算符公开符号.但前后增量仅因种类而异.

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Semantics;
using System.Linq;

namespace so39468373
{
    internal static class Program
    {
        private static void Main()
        {
            var tree = CSharpSyntaxTree.ParseText(@"
public class c
{
    public static c operator ++(c o) { return o; }
    static c pre(c o) => ++o;
    static c post(c o) => o++;
    public static void Main() {}
}");
            var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
            var compilation = CSharpCompilation.Create(null, new[] { tree }, new[] { mscorlib });
            var …
Run Code Online (Sandbox Code Playgroud)

c# roslyn

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

如何在编译之前修改代码?

使用Roslyn,我想在实际编译之前修改我的C#代码.现在,我只需要:

[MyAnotatedMethod]
public void MyMethod() 
{
    // method-body 
}
Run Code Online (Sandbox Code Playgroud)

并且基于注释,我想在方法的开头和方法的末尾注入一些代码.

我知道PostSharp,但那不是我想要的.

这可能与罗斯林有关吗?如果是的话,你能举个例子吗?

c# roslyn

47
推荐指数
2
解决办法
3248
查看次数

41
推荐指数
5
解决办法
9147
查看次数

C#7.3枚举约束:为什么我不能使用可空的枚举?

既然我们有枚举约束,为什么编译器不允许我编写这段代码?

public static TResult? ToEnum<TResult>(this String value, TResult? defaultValue)
    where TResult : Enum
{
    return String.IsNullOrEmpty(value) ? defaultValue : (TResult?)Enum.Parse(typeof(TResult), value);
}
Run Code Online (Sandbox Code Playgroud)

编译器说:

错误CS0453类型'TResult'必须是非可空值类型才能在泛型类型或方法'Nullable'中将其用作参数'T'

c# enums roslyn c#-7.3

40
推荐指数
2
解决办法
3894
查看次数

visual studio 2015 update 2 RTM和RC调试上下文不可用

更新1:

在将visual studio更新到2015版更新2 RTM之后,问题仍然存在.

2016年4月12日更新2补丁:

感谢Patrick Nelson.

补丁已经发布

你可以在这里下载补丁.

2016年8月16日更新:

最新vs 2015更新3 KB3165756有同样的问题不要更新

使用版本:

visual studio update 2 rc上的最新稳定版本

禁用我的所有扩展程序,并重新启动我的所有设置

重现步骤:

  1. 安装visual studio update 2 rc
  2. 使用asp.net mvc核心模板创建新项目
  3. 调试应用程序

预期行为:

能够调试asp.net应用程序 在此输入图像描述

实际行为:

我无法在visual studio编辑器或即时窗口中探索变量的上下文,我在即时窗口中收到以下错误

在此输入图像描述 错误CS0103:当前上下文中不存在名称"myvariable"

c# visual-studio roslyn visual-studio-2015 asp.net-core

36
推荐指数
2
解决办法
2389
查看次数

空传播算子和扩展方法

我一直在研究Visual Studio 14 CTP和C#6.0以及使用零传播运算符.

但是,我找不到为什么以下代码无法编译.这些功能尚未记录,所以我不确定这是一个错误还是扩展方法,?.操作员不支持这些方法并且错误消息具有误导性.

class C
{
    public object Get()
    {
        return null;
    }
}

class CC
{
}

static class CCExtensions
{
    public static object Get(this CC c)
    {
        return null;
    }
}

class Program
{
    static void Main(string[] args)
    {
        C c = null;
        var cr = c?.Get();   //this compiles (Get is instance method)

        CC cc = null;
        var ccr = cc?.Get(); //this doesn't compile

        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

错误信息是:

'ConsoleApplication1.CC'不包含'Get'的定义,也没有扩展方法'Get'接受类型'ConsoleApplication1.CC'的第一个参数(你是否缺少using指令或汇编引用?)

c# roslyn c#-6.0

35
推荐指数
2
解决办法
3989
查看次数

在C#interactive中获取调试器上下文

C#Interactive似乎比立即窗口更强大(至少它处理LINQ中经常使用的lambda表达式 - 请参阅Visual Studio调试"快速监视"工具和lambda表达式),但看起来它不能用作一个替代品,因为它不知道调试器上下文.有没有办法访问调试器上下文?

我已经看到在F#中获取调试器上下文,它可能需要相同的东西,但也许有新的/不同的东西可用.

http://extendedimmediatewin.codeplex.com/可能很有用,但看起来已经死了,虽然有人在2011年10月18日说他打算将它移植到VB.Net(http://extendedimmediatewin.codeplex.com/discussions/75589).

c# debugging visual-studio roslyn

33
推荐指数
2
解决办法
6961
查看次数