标签: roslyn

为什么Roslyn中有如此多的对象池实现?

ObjectPool的是在罗斯林C#编译器用于重复使用,这通常得到new'ed起来,垃圾收集经常经常使用的对象类型.这减少了必须发生的垃圾收集操作的数量和大小.

Roslyn编译器似乎有几个单独的对象池,每个池有不同的大小.我想知道为什么有这么多的实现,首选的实现是什么,以及为什么他们选择了20,100或128的池大小.

1 - SharedPools - 如果使用BigDefault,则存储20个对象的池或100个.这个也很奇怪,因为它创建了一个PooledObject的新实例,当我们尝试汇集对象而不创建和销毁新对象时这没有任何意义.

// Example 1 - In a using statement, so the object gets freed at the end.
using (PooledObject<Foo> pooledObject = SharedPools.Default<List<Foo>>().GetPooledObject())
{
    // Do something with pooledObject.Object
}

// Example 2 - No using statement so you need to be sure no exceptions are not thrown.
List<Foo> list = SharedPools.Default<List<Foo>>().AllocateAndClear();
// Do something with list
SharedPools.Default<List<Foo>>().Free(list);

// Example 3 - I have also seen this variation of the above pattern, which …
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection roslyn

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

在CodeDomProvider(rosyln)中使用C#6功能

CodeDomProvider objCodeCompiler = CodeDomProvider.CreateProvider( "CSharp" );

CompilerParameters objCompilerParameters = new CompilerParameters();

...

CompilerResults objCompileResults = objCodeCompiler.CompileAssemblyFromFile( objCompilerParameters, files.ToArray() );
Run Code Online (Sandbox Code Playgroud)

当我编译我的文件时,我得到:

FileFunctions.cs(347):错误:意外字符'$'

有没有人知道如何使用CodeDom编译进行字符串插值?

我找到了这个链接:如何使用CSharpCodeProvider定位.net 4.5?

所以我尝试过:

     var providerOptions = new Dictionary<string, string>();
     providerOptions.Add( "CompilerVersion", "v4.0" );

     // Instantiate the compiler.
     CodeDomProvider objCodeCompiler = CodeDomProvider.CreateProvider( "CSharp", providerOptions );
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.

我还将目标框架更新到.NET Framework 4.6.

注意:我不能指定"v4.5"或"v4.6"或者我会得到:

************** Exception Text **************
System.InvalidOperationException: Compiler executable file csc.exe cannot be found.
   at System.CodeDom.Compiler.RedistVersionInfo.GetCompilerPath(IDictionary`2 provOptions, String compilerExecutable)
   at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
   at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch(CompilerParameters options, String[] fileNames)
   at …
Run Code Online (Sandbox Code Playgroud)

.net c# codedom string-interpolation roslyn

31
推荐指数
5
解决办法
8973
查看次数

如何以编程方式使用Roslyn编译C#文件?

我读到你无法使用CSharpCodeProvider编译C#6.0,因此尝试使用Roslyn.但我找不到一个很好的例子,如何加载文件,然后将其编译为DLL.

我应该如何使用Roslyn编写与此代码类似的内容?或者还有其他方法吗?现在,当我尝试编译包含对带有C#6.0代码的项目的引用的文件时,它只是说"命名空间'y'中不存在类型或命名空间名称'x'(您是否缺少程序集引用?)"

    public string CompileCode()
    {
        var provider = new CSharpCodeProvider();
        var outputPath = Path.Combine(Path.GetDirectoryName(_path), $"Code.dll");
        var compilerparams = new CompilerParameters(_referencedAssemblies, outputPath);
        CompilerResults results = provider.CompileAssemblyFromFile(compilerparams, _path);
        var dllPath = results.PathToAssembly;
        if (!results.Errors.HasErrors)
            return dllPath;
        PrintError(results.Errors);
        return ""; 
    }
Run Code Online (Sandbox Code Playgroud)

总之,我想:

  • 加载C#文件
  • 将它编译为一个DLL,以便我以后加载它.

c# roslyn

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

委托Roslyn中的缓存行为更改

给出以下代码:

public class C
{
    public void M()
    {
        var x = 5;
        Action<int> action = y => Console.WriteLine(y);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用VS2013,.NET 4.5.查看反编译代码时,我们可以看到编译器在调用站点缓存委托:

public class C
{
    [CompilerGenerated]
    private static Action<int> CS$<>9__CachedAnonymousMethodDelegate1;
    public void M()
    {
        if (C.CS$<>9__CachedAnonymousMethodDelegate1 == null)
        {
            C.CS$<>9__CachedAnonymousMethodDelegate1 = new Action<int>(C.<M>b__0);
        }
        Action<int> arg_1D_0 = C.CS$<>9__CachedAnonymousMethodDelegate1;
    }
    [CompilerGenerated]
    private static void <M>b__0(int y)
    {
        Console.WriteLine(y);
    }
}
Run Code Online (Sandbox Code Playgroud)

查看在Roslyn中反编译的相同代码(使用TryRoslyn),产生以下输出:

public class C
{
    [CompilerGenerated]
    private sealed class <>c__DisplayClass0
    {
        public static readonly …
Run Code Online (Sandbox Code Playgroud)

.net c# compiler-construction roslyn c#-6.0

30
推荐指数
2
解决办法
2540
查看次数

Visual Studio外部的C#REPL

F#有一个REPL(读取 - 评估 - 打印循环)F#Interactive , C:\Program Files (x86)\Microsoft F#\v4.0\Fsi.exe.

据我所知,C#现在有自己的交互式REPL,与Roslyn一起发布.如何在Visual Studio外部打开?在哪里csi.exe

.net c# visual-studio fsi roslyn

29
推荐指数
5
解决办法
9497
查看次数

如何在visual studio 2015中使用roslyn c#编译器?

我对罗斯林有点困惑.

我做了什么:我已经安装了vs 2015社区版并在extensibilty下载>下载编译器平台sdk.

所以我创建了一个简单的控制台应用程序:hello world example.

那么现在我期望在vs2015默认值和roslyn之间选择c#编译器......但是我没有找到这样的选项.所以我的第一个问题是:如何选择c#编译器的版本?

其次我已经下载了master-roslyn并且我构建了,然后我找到了csc.exe,奇怪的是,如果我执行exe,我得到c#编译器版本42.42.42.42.???? 对?

然后我按照一些教程,但我的目的都是:从文本文件或字符串变量加载源并分析或更改语法树,然后编译为var.

那么在这一点上我很困惑......所以:

什么是roslyn?元编译器?这意味着我可以像运行一样在运行时更改我的代码?第二:如何使用默认csc编译vs2015或选择roslyn?第三:如果我构建自定义版本的roslyn如何使用Vs2015编译我的源代码?哪知道csc.exe是否是roslyn?没有帮助或命令行打印代号.

谢谢

c# visual-studio roslyn

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

为什么我不能从表达式身体成员中抛出异常?

使用表达式成员允许您将方法或属性的主体定义为没有return关键字的单个表达式(如果它返回了某些内容).

例如,它变成了这些

int Method1()
{
    return 5;
}

void Method2()
{
    Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

进入这些

int Method1() => 5;

void Method2() => Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)

当您从正文中抛出异常时,会产生差异:

void Method3()
{
    throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

但是,以下内容将无法编译:

void Method3() => throw new Exception();
Run Code Online (Sandbox Code Playgroud)

以下消息:

Warning The member 'Program.Exception()' does not hide an inherited member. The new keyword is not required.  
Error   'Program.Exception()' must declare a body because it is not marked abstract, extern, or partial  
Error   ; expected  
Error   Invalid token 'throw' in class, struct, or …
Run Code Online (Sandbox Code Playgroud)

c# roslyn c#-6.0

28
推荐指数
2
解决办法
4733
查看次数

可能是Visual Studio 2015中的C#编译器错误

我认为这是一个编译器错误.

使用VS 2015编译时,以下控制台应用程序编译并执行完美:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = MyStruct.Empty;
        }

        public struct MyStruct
        {
            public static readonly MyStruct Empty = new MyStruct();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在它变得很奇怪了:这个代码编译,但它会TypeLoadException在执行时抛出.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = MyStruct.Empty;
        }

        public struct MyStruct
        {
            public static readonly MyStruct? Empty = null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你遇到同样的问题吗?如果是这样,我将在Microsoft提出问题.

代码看起来毫无意义,但我用它来提高可读性并实现消歧.

我有不同的重载方法,如

void DoSomething(MyStruct? arg1, string arg2)

void DoSomething(string arg1, string arg2) …

c# compiler-bug roslyn visual-studio-2015 coreclr

28
推荐指数
2
解决办法
1535
查看次数

针对净标准1.6的.net核心应用中的动态参考?

我正在尝试dynamic在C#.net核心应用程序中使用一个变量,该应用程序的目标是.net标准1.6.(平台?库?框架?元框架?)我第一次在实际应用程序中遇到这个问题,但我把它减少到最小的再现.

project.json

{
    "version": "1.0.0-*",
    "buildOptions": { "emitEntryPoint": true },
    "dependencies": { "NETStandard.Library": "1.6.0" },
    "frameworks": {
        "netstandard1.6": { "imports": "dnxcore50" }
    },
    "runtimes": { "win10-x64": {} }
}
Run Code Online (Sandbox Code Playgroud)

Program.cs中

using System;

public class Program {
    public static void Main(string[] args) {
        dynamic hello = "hello world";
        Console.WriteLine(hello);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建它时,我在Console.WriteLine(hello);说这个时遇到了构建错误.

CS0656缺少编译器所需的成员'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'

是否可以dynamic在面向netstandard 1.6的应用程序中使用变量?怎么样?

c# roslyn .net-core .net-standard-1.6

28
推荐指数
3
解决办法
1万
查看次数

编译器错误消息:编译器失败,错误代码为-532462766

这个似乎是在从vs2015升级到vs2017之后发起的.错误是

编译器错误消息:编译器失败,错误代码为-532462766.

一些笔记..

  • 它在localhost上运行得很好.
  • 目标框架是4.5.2
  • 我删除并重新安装了所有nuget包

跟踪我有什么

ModuleName     AspNetInitializationExceptionModule
Notification   BEGIN_REQUEST
HttpStatus     500
HttpReason     Internal Server Error
HttpSubStatus  0
ErrorCode      The operation completed successfully.
Run Code Online (Sandbox Code Playgroud)

完整的信息是这样的

C:\Windows\SysWOW64\inetsrv>C:\Inetpub\vhosts\xxx\example.com\bin\roslyn\csc.exe /t:library /utf8output /nostdlib+ 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\6c18e943\c9225320_3eb1d201\Antlr3.Runtime.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel\v4.0_4.0.0.0__b77a5c561934e089\System.ServiceModel.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\e4a088a1\d00a7551_3eb1d201\Microsoft.AI.Agent.Intercept.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\cb16e378\ec642953_3eb1d201\Microsoft.AI.WindowsServer.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Activities\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Activities.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.DynamicData\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.DynamicData.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\3bcba04c\243c6d4f_3eb1d201\Microsoft.AI.DependencyCollector.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Serialization\v4.0_4.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\44aabbe1\43688156_3eb1d201\Microsoft.AspNet.Identity.EntityFramework.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\c0b08566\baa93959_3eb1d201\Microsoft.Owin.Security.dll" /R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel.Activation\v4.0_4.0.0.0__31bf3856ad364e35\System.ServiceModel.Activation.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\4ed695a8\d6318e55_3eb1d201\Microsoft.AspNet.Identity.Core.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.Extensions\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Extensions.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.Routing\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Routing.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\e1faf943\7dc91593_3eb1d201\System.Web.Helpers.dll" /R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\d06f7c29\f00a7a59_3eb1d201\Microsoft.Owin.Security.Facebook.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\72fa63a2\3e710999_3eb1d201\System.Web.Optimization.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\69efa965\80b6a15a_3eb1d201\Microsoft.Owin.Security.OAuth.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\b5b18ada\bafef257_3eb1d201\Microsoft.Owin.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.ApplicationServices\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.ApplicationServices.dll" 
/R:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.WorkflowServices\v4.0_4.0.0.0__31bf3856ad364e35\System.WorkflowServices.dll" 
/R:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\57e80104\20ff5a91\assembly\dl3\57f6acbf\bf5aa39d_3eb1d201\System.Web.WebPages.Razor.dll" …
Run Code Online (Sandbox Code Playgroud)

.net asp.net-mvc roslyn iis-8.5

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