我在我的项目中安装了一个Microsoft ASP.NET Web API压缩nuget包,并在Register方法中添加了一行到WebApiconfig,如此链接所示https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/
GlobalConfiguration.Configuration.MessageHandlers.Insert(0, new CompressionHandler(new GZipCompressor(), new DeflateCompressor()));
还将以下代码添加到web.config文件
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
但我收到错误
错误1类型&#39; System.Object&#39;在一个不是的程序集中定义 引用。您必须添加对程序集&System; System.Runtime的引用, 版本= 4.0.0.0,文化=中立, 公钥= b03f5f7f11d50a3a&#39 ;. d:.... \ App_Start \ WebApiConfig.cs
编译器抱怨GlobalConfiguration类有错误。 我使用的是&gt; .NET Framework 4.5
答案 0 :(得分:33)
我遇到了同样的错误并通过做两件事来解决这个问题。
我正在构建一个简单的测试ASP.Net应用程序,以尝试使用Google API的OAuth2.0。我使用“nuget”来安装Google.Apis.Calendar.v3 (v1.13.1.509)
库,它带来了许多依赖它的dll。
在Visual Studio 2015 for Web(Express)上编译一个看似简单的ASP.Net项目,目标是“Framework 4.5”。错误以两种方式表现出来:
我最初使用Build命令Ctrl+F5
编译代码。然后我得到了一个构建错误,但是在“错误”选项卡中没有通常指向源代码行的条目。 (该项目将停止建设)。输出是:
------ Build started: Project: oauth2.pylogen.com, Configuration: Debug Any CPU ------ Validating Web Site Building directory '/App_Code/'. E:\Projects\oauth2.pylogen.com\App_Code\Google.Api.Pylogen\FlowMetadata.cs(26,13): error CS0012: The type 'System.Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Validation Complete ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
然后我继续安装dotNet Framework 4.6.1 Developer Pack(最新版本不是预览版)。
然后我重新启动VS 2015 for Web并再次构建。这次我在“错误”选项卡中有一个条目,指向源代码行:
flowInit.Scopes = new string[] { Google.Apis.Calendar.v3.CalendarService.Scope.Calendar };
当我注释掉这一行时,项目构建。我几乎无法对这一行做任何事情,但我只是想表明错误的默默无闻!
安装Framework 4.6.1 Developer Pack后。我还将此行添加到Web.Config:
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
在此之后我的项目完全构建。我的假设是Google指的是较旧的System.Runtime.dll(尽管他们的Nuget包详细信息显示目标框架是4.5)。
答案 1 :(得分:17)
这有点棘手,因为我还尝试首先将程序集引用添加到项目的根Web.config文件中,这对我的情况没有帮助。之后,我为ASP.NET MVC项目的视图 文件夹中的 Web.config 文件做了同样的事情:<强>视图\的Web.config 强>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
</system.web>
以上工作。
实际上我之前已经有过一个程序集引用System.Web.Mvc
,所以这里是我的ASP.NET MVC项目的完整列表。
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
</system.web>
答案 2 :(得分:1)
.NET Facades文件夹中的其他文件可能是 也导致相同的问题,并将使用相同的方法来修复 如上所述,每个文件都有。
您可以在以下文件夹下找到相关文件 (取决于目标.NET运行时),示例:
.NET 4.5.1 – {ProgramFilesFolder x86 folder} \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades .NET 4.5 – {ProgramFilesFolder x86 folder} \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades
答案 3 :(得分:1)
我通过将C#编译器升级到Roslyn来解决了这个问题。
您可以转到Project
- Enable latest C# and VB features for ASP.NET Project
。
答案 4 :(得分:0)
在<Reference Include="System.Runtime" />
解决我的问题之前,在csproj文件中添加<Reference Include="System.Runtime.Serialization" />
。
答案 5 :(得分:0)
我只是将解决方案上的目标框架从 .NET Framework 4.5 更改为 .NET Framework 4.6.1,就成功了。