标签: roslyn

找不到路径的一部分... bin\roslyn\csc.exe

我正在尝试运行从TFS源代码控制中检索的Asp.net MVC项目.我添加了所有程序集引用,我能够成功构建和编译,没有任何错误或警告.

但是我在浏览器中收到以下错误:

找不到路径'C:\ B8akWorkspace\B8akProject\B8akSolution\B8AK.Portal\bin\roslyn\csc.exe'的一部分.

以下是错误页面的完整屏幕截图.

在此输入图像描述

经过几天的研究,我了解Roslyn是.Net编译器平台,提供高级编译功能.但是,我不明白为什么我的构建试图找到\ bin\roslyn\csc.exe,因为我没有配置任何与Roslyn相关的东西,也没打算在我的项目中使用Roslyn.

.net c# asp.net asp.net-mvc roslyn

635
推荐指数
31
解决办法
32万
查看次数

C#交互式窗口可以与我的代码交互吗?

我安装了Roslyn.现在,如果我知道在Visual Studio中查看的位置,我可以打开"C#交互式窗口",然后运行代码:

> 5 + 3
8
Run Code Online (Sandbox Code Playgroud)

那很可爱.现在我该如何与我的代码进行交互-my类?假设我打开了一个项目.

> new Cog()
(1,5): error CS0246: The type or namespace name 'Cog' could not be found (are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio roslyn

147
推荐指数
5
解决办法
4万
查看次数

编写C#编译器的语言是哪种?

我查看了http://referencesource.microsoft.com/上的源代码,看来所有源代码都在C#中.

我还查看了新的C#编译器平台(Roslyn)的源代码,它也在C#中.怎么可能?C#语言编译器是用C#编写的吗?还是我错过了一些明显的东西?如果C#编译器是用C#编写的,那么它是如何工作的?

c# compiler-construction roslyn

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

C#6.0功能不适用于Visual Studio 2015

我正在使用C#6.0测试Visual Studio 2015,但语言功能不起作用.在MVC Web应用程序中,以下代码编译:

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我通过Debug和IIS Express运行应用程序时,我收到以下错误:

CS1525:无效的表达式术语'.'

如何启用这些功能?

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

134
推荐指数
6
解决办法
4万
查看次数

VS2015构建失败,没有动态的错误消息

我正在编写一个返回JSON的代码的单元测试.它返回的类型是匿名类型,所以我想验证它上面的值我只是将对象转换为a dynamic来做我的断言.

但是,当我这样做时,我的构建失败但我没有任何错误消息.我能够在新的单元测试项目中使用非常简单的代码重现这一点:

[TestMethod]
public void TestMethod1()
{
    var obj = new { someValue = true };

    dynamic asDynamic = obj;

    Assert.IsTrue(asDynamic.someValue);
}
Run Code Online (Sandbox Code Playgroud)

请参阅下面的构建失败的屏幕截图

建立失败

当我注释掉断言时,构建成功:

在没有断言的情况下构建成功

相比之下,我在LinqPad 5 beta(使用Roslyn编译器)中运行了以下代码并且没有任何问题:

var obj = new { someValue = true };
dynamic asDynamic = obj;
Console.WriteLine((asDynamic.someValue == true).ToString());
Run Code Online (Sandbox Code Playgroud)

真正

这里发生了什么?由于错误没有显示我不能说,如果我用dynamic,不正确,或者如果它不能找到使用过载IsTrue()的,因为dynamic,或者如果这是在编译器中的错误(虽然我很怀疑这个,我没有任何证据证明我的代码有问题).

关于过载问题,我试过Assert.IsTrue((bool)asDynamic.someValue);但是构建仍然失败,仍然没有错误消息.

根据Per @ RonBeyer的评论,我也尝试过更多的演员,如下所示无济于事:

    dynamic asDynamic = (dynamic)obj;
    Assert.IsTrue(((dynamic)asDynamic).someValue);

    Assert.IsTrue((bool)asDynamic.somevalue);
Run Code Online (Sandbox Code Playgroud)

经过仔细检查,我发现输出窗口中列出了一个错误:

c:...\DynamicBuildFailTest\UnitTest1.cs(16,33,16,42):错误CS0656:缺少编译器所需的成员'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'

好的,VS2013更善于报告错误,我会根据这些搜索:

在此输入图像描述

好的,添加对Microsoft.CSharp的引用修复了构建错误,但我会将此问题保持打开状态,因为它可能是VS2015的一个问题(在我看来)应该解决.

c# roslyn visual-studio-2015

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

Roslyn语法节点是否重用?

我一直在研究Roslyn CTP,虽然它解决了与Expression树API类似的问题,但它们都是不可变的,但Roslyn以一种完全不同的方式这样做:

  • Expression节点没有对父节点的引用,使用a进行修改ExpressionVisitor,这就是为什么可以重用大部件的原因.

  • SyntaxNode另一方面,Roslyn 有一个对其父级的引用,因此所有节点都有效地成为一个无法重用的块.类似的方法Update,ReplaceNode等等,提供了进行修改.

这到底在哪里?DocumentProjectISolution?API促进树的逐步更改(而不是按钮向上),但每个步骤是否完整复制?

为什么他们这样做了?我有什么有趣的伎俩吗?

c# expression-trees roslyn

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

nameof()是在编译时评估的吗?

在C#6中,您可以使用nameof()运算符来获取包含变量名称或类型的字符串.

这是在编译时评估,还是在运行时通过一些Roslyn API评估?

c# roslyn c#-6.0

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

Microsoft Roslyn与CodeDom

昨天在InfoWorld上关于新微软Roslyn新闻稿中:

这种"解构"编译器最明显的优点是它允许从.Net应用程序内部调用整个编译执行过程.Hejlsberg演示了一个C#程序,它将一些代码片段作为字符串传递给C#编译器; 编译器将生成的IL汇编代码作为对象返回,然后将其传递到公共语言运行库(CLR)以供执行.瞧!使用Roslyn,C#获得了动态语言在运行时生成和调用代码的能力.

自从.NET 4发布以来,我已经能够做到这一点CSharpCodeProvider.CompileAssemblyFromSource,实际上我在之前编写的一个ASP.Net项目中使用它实际上就是这样 - 允许用户在文本框中键入代码,选择程序集/名称空间引用,然后执行并显示该代码的输出,以便在Windows Azure上进行实时环境代码测试.

CodeDomRoslyn的一部分/前身吗?罗斯林的特殊好处是CodeDom什么?

.net codedom roslyn

107
推荐指数
4
解决办法
3万
查看次数

如何将msbuild升级到C#6?

我想在我的项目中使用C#6(空传播,其他功能).

我在我的电脑上安装了VS 2015,它的工作非常出色并构建了测试代码

var user = new SingleUserModel(); //all model fields are null
var test = user.User?.Avatar?["blah"];
Run Code Online (Sandbox Code Playgroud)

但是当我将我的项目推送到repo并且CI开始构建它时,由于不支持,构建失败?.

我已经在CI服务器上安装了VS2015,但是喜欢它不使用它.我能做什么?

CI - CruiseControl .NET构建 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

c# msbuild continuous-integration roslyn c#-6.0

103
推荐指数
3
解决办法
5万
查看次数

Roslyn无法编译代码

将项目从VS2013迁移到VS2015之后,项目不再构建.以下LINQ语句中发生编译错误:

static void Main(string[] args)
{
    decimal a, b;
    IEnumerable<dynamic> array = new string[] { "10", "20", "30" };
    var result = (from v in array
                  where decimal.TryParse(v, out a) && decimal.TryParse("15", out b) && a <= b // Error here
                  orderby decimal.Parse(v)
                  select v).ToArray();
}
Run Code Online (Sandbox Code Playgroud)

编译器返回错误:

错误CS0165使用未分配的局部变量'b'

是什么导致这个问题?是否可以通过编译器设置来修复它?

.net c# linq roslyn

95
推荐指数
4
解决办法
7084
查看次数