标签: roslyn

.NET CoreCLR,CoreRT,Roslyn和LLILC之间有什么区别

最近我开始阅读有关.NET重组细节的信息(主要是通过.NET Core github页面).它接缝他们创建了兄弟项目以支持更多平台.在阅读时我的印象是CoreCLRCoreRT是一个新的OpenSource版本的专有Roslyn编译器.CoreRT提供本机(AOT)编译.而LLILC是一种备选实现指挥LLVM框架.

任何人都可以从用户角度确认和描述这些项目的差异和目标吗?为什么有人会在未来使用Roslyn而不是CoreCLR?

.net clr roslyn coreclr corert

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

动态调用的RuntimeBinderInternalCompilerException

将对象作为动态参数传递时,我收到了意外的RuntimeBinderInternalCompilerException.

我将尝试解释这个场景,因为它太容易粘贴代码了.我正在和Roslyn做一些非常奇怪的讨厌,所以听起来很奇怪.

  1. 执行申请
  2. 监视更改的源代码
  3. 使用更改的文件/类重新编译程序集的有效差异
  4. 将新编译的程序集加载到原始AppDomain中
  5. 将现有对象实例作为Dynamic传递给新的/更改的代码,因此新代码可以在现有的上下文/应用程序状态下运行.

这种动态传递应该有效,因为类型是兼容的:即,在我的情况下,我可以保证它具有功能匹配的方法/类型.

但是当我去执行change + reloaded方法,并且它收到一个类型为dynamic的对象时,我得到了这个异常.

RuntimeBinderInternalCompilerException was unhandled.
An unexpected exception occurred while binding a dynamic operation
Run Code Online (Sandbox Code Playgroud)

每个MSDN:

此类异常与RuntimeBinderException的不同之处在于,RuntimeBinderException表示在通常的编译器错误意义上无法绑定,而RuntimeBinderInternalCompilerException表示运行时绑定程序本身的故障.

谷歌绝对没有结果.我不知道如何进一步调试它.有什么建议?

(我确实做了一些沙盒测试,以确保自己可以在运行时将不同的程序集加载到测试应用程序中,并将实例类型从不同的程序集传递给接受动态参数的单个方法.所以它在这种情况下有效.)

c# dynamic roslyn

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

如何使用Roslyn编译C#解决方案?

我有一个软件,可以根据用户操作为C#项目生成代码.我想创建一个GUI来自动编译解决方案,所以我不必加载Visual Studio只是为了触发重新编译.

我一直在寻找机会与Roslyn一起玩,并决定尝试使用Roslyn而不是msbuild来做到这一点.不幸的是,我似乎找不到以这种方式使用Roslyn的任何好资源.

谁能指出我正确的方向?

c# roslyn

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

scriptcs hosting - 优于Roslyn的优势

如果我想支持脚本在我的应用程序,确实scriptcs只是用普通的香草在提供任何特别的优势罗斯林脚本引擎?

roslyn scriptcs

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

CSC:错误CS7038:无法发出模块

安装Visual Studio 2015并构建我的项目后,我收到错误

"CSC:错误CS7038:无法发出模块".

但是我的解决方案在Visual Studio 2013中正常运行.

它是一个ASP.NET webforms项目.NET 4.0

任何人?

更新:看起来问题与Red Gate Smart Assembly结合使用默认值的方法参数有关.

更新: Smart Assembly 6.9为我修复了错误.

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

24
推荐指数
4
解决办法
1万
查看次数

VS 2017 Bug或新功能?

升级到VS 2017后,我从此代码中得到以下错误(一直运行良好)

byte[] HexStringToByteArray(string hex)
    {
        if (hex.Length % 2 == 1)
            throw new Exception("The binary key cannot have an odd number of digits");

        byte[] arr = new byte[hex.Length >> 1];

        for (int i = 0; i < hex.Length >> 1; ++i) // Error in this line
        {
            arr[i] = (byte)((GetHexVal(hex[i << 1]) << 4) + (GetHexVal(hex[(i << 1) + 1])));
        }

        return arr;
    }
Run Code Online (Sandbox Code Playgroud)

例外:

Error 1: The variable 'i' cannot be used with type arguments
Error 2: 'hex' …
Run Code Online (Sandbox Code Playgroud)

c# roslyn c#-7.0

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

是否可以使用.net核心Roslyn编译器编译单个C#代码文件?

在旧的.net中,我们曾经能够运行csc编译器来编译单个cs文件或多个文件.使用.net核心,我们csc坚持拥有一个合适的项目文件.是否有一个独立的命令行编译器,它允许编译源代码文件而无需项目(并列出在同一命令行上引用的依赖项)?

在Linux上,当我安装了旧的csc和新的.net核心时,我得到了这些时间:

[root@li1742-80 test]# time dotnet build
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  test -> /root/test/bin/Debug/netcoreapp2.0/test.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:03.94

real    0m7.027s
user    0m5.714s
sys     0m0.838s

[root@li1742-80 test]# time csc Program.cs
Microsoft (R) Visual C# Compiler version 2.3.0.61801 (3722bb71)
Copyright (C) Microsoft Corporation. All rights reserved.


real    0m0.613s
user    0m0.522s
sys     0m0.071s
[root@li1742-80 test]#
Run Code Online (Sandbox Code Playgroud)

使用.net核心注意7秒,使用旧csc注意几百毫秒dotnet build.

我希望能够使用.net核心快速编译,因为我曾经能够使用csc.

c# compilation csc roslyn .net-core

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

使用Roslyn编译时编译源代码

是否可以在CI服务器上的MSBuild任务中使用Roslyn进行编译之前修改源代码?我已经成功地在VS中做了我想要的但是我想知道在VS之外是否可能.目前我正在研究Workspace API和Compiler API,它们似乎是实现这一目标的正确工具,但我仍然不确定它是否可行?特别是我担心返回我对MSBuild所做的更改以允许它继续工作.

.net c# msbuild roslyn

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

params超载明显模糊 - 仍然编译和工作?

我们刚刚在代码中找到了这些:

public static class ObjectContextExtensions
{

    public static T Find<T>(this ObjectSet<T> set, int id, params Expression<Func<T, object>>[] includes) where T : class
    {
        ...
    }

    public static T Find<T>(this ObjectSet<T> set, int id, params string[] includes) where T : class
    {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,除了params.之外,它们具有相同的签名.

它们被用于多种方式,其中之一:

DBContext.Users.Find(userid.Value); //userid being an int? (Nullable<int>)
Run Code Online (Sandbox Code Playgroud)

对我来说奇怪的是,它解决了第一次超载.

Q1:为什么这不会产生编译错误?

Q2:为什么C#编译器将上述调用解析为第一种方法?

编辑:只是为了澄清,这是C#4.0,.Net 4.0,Visual Studio 2010.

c# overloading params roslyn

23
推荐指数
3
解决办法
960
查看次数

Visual Studio 2015 CTP中没有C#6.0?

我刚刚在Azure上创建了一个新的VM(使用Azure团队从图库中提供的图像)和即将在线出现的Visual Studio 2014的CTP版本,用于测试它,特别是使用新的C#6.0功能.

但是,它没有为开箱即用的C#6.0提供支持,因为没有语言扩展(主构造函数,属性初始化器,安全导航操作员)在那里工作.

MSDN上的博客条目建议将以下内容添加到项目设置中:

 <LangVersion>Experimental</LangVersion>
Run Code Online (Sandbox Code Playgroud)

但这在我的控制台项目中没有任何改变.即使是第二个链接示例代码也根本不编译.

安全导航操作员无法识别

我错过了什么吗?

c# visual-studio roslyn c#-6.0 visual-studio-2015

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