ASP.NET Core 1.1 使用 C# 动态编译缺少编译器需要成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”

Posted

技术标签:

【中文标题】ASP.NET Core 1.1 使用 C# 动态编译缺少编译器需要成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”【英文标题】:ASP.NET Core 1.1 compiling with C# dynamic Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create' 【发布时间】:2017-04-17 05:43:36 【问题描述】:

我正在使用 Visual Studio 2017 RC 并启动了一个针对完整 .NET Framework 的新 ASP.NET Core 项目。

这行代码不会编译。

 dynamic handler = _container.GetService(handlerType);

 if (handler == null) _logger.LogError("Can't find handler to handle " + cmd.GetType().Name);

我收到以下错误

CS0656  Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'

经过一些谷歌搜索后,看起来这是因为我缺少 Microsoft.CSharp 程序集。有很多人偶然发现了他的问题,但似乎没有使用 .NET Core 1.1。

所以我这样做了Install-Package Microsoft.CSharp 并获得了 4.3.0 版本。我的项目仍然无法构建。

如果我向 Microsoft.CSharp(GAC 版本)添加程序集引用,则它会编译并运行。

这是一个错误吗?我本来希望 NuGet 包能解决这个问题?

【问题讨论】:

此 NuGet 包用于针对 .NET Standard。对于完整的框架,应该使用 GAC 的版本。没关系。但是 Visual Studio 2017 RC 没有自动添加这个引用可能是一个错误。 【参考方案1】:

我遇到了这个问题。我为我解决了这个问题。 您必须从 nuget 将 Microsoft.CSharp 库安装到您的解决方案中。

您可以使用 Package Manager Console 来安装 Microsoft.CSharp。例如如果要安装 Microsoft.CSharp 4.7.0 版本,则必须在 Package Manager Console 上运行此命令:

Install-Package Microsoft.CSharp -Version 4.7.0

Nuget 链接:Microsoft.CSharp

【讨论】:

安装后,您必须关闭解决方案并重新打开它才能正常工作 @ruben 谢谢你的评论。但是我刚安装,没有重新打开项目【参考方案2】:

只需添加 Microsoft.CSharp.dll 的引用即可消除您的错误。

【讨论】:

【参考方案3】:

我在尝试将类型 dynamic 隐式转换为 object 时遇到了这个问题。

    var output = new Dictionary<string, object>(); // <- object
    foreach(var attribute in attributes)
    
        var attr = attribute as IEntityAttribute<dynamic>; // <- dynamic
        if (attr != null)
        
            output.Add(attr.GetType().Name, attr.Value);
        
    
    return output;

【讨论】:

【参考方案4】:

有一个类似的问题。 我想为uses a dynamic object 的 NetFramework 4.6.2 环境创建一个 NetStandartd 2.0 库,并收到错误“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”。此错误是由缺少of the Microsoft.CSharp library 引起的。 通过correcting .csproj 文件我可以to make the correct linking

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
    <DependsOnNETStandard>netstandard2.0</DependsOnNETStandard>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
</Project>

【讨论】:

以上是关于ASP.NET Core 1.1 使用 C# 动态编译缺少编译器需要成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 代码 ASP.NET Core 运行 SQL 脚本

C# ASP.NET Core Entity Framework Core 异步 ToQueryable 比较

Asp.net Core-在使用 javascript 或 C# 上传之前选择和验证 excel 文件?

C# Asp.Net Core 使用 Redis 进行 ADDDistributedMemoryCache 和数据保护

Asp.Net Core 1.1 消费web api

ASP.NET Core MVC(C#) 文件上传及后台输出响应Aspose.Words处理后文件