我在我的项目中安装了一个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文件中
但是我收到了一个错误
错误1类型"System.Object"在未引用的程序集中定义.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.d:....\App_Start\WebApiConfig.cs
编译器抱怨GlobalConfiguration类,上面有错误.我正在使用> .NET Framework 4.5
我得到了同样的错误并通过做两件事来解决它.
我正在构建一个简单的测试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).
通过Nuget安装和删除System.ValueTuple的System.ValueTyple.dll
文件在我的bin文件夹中。删除它可以为我解决问题。
这有点棘手,因为我还尝试首先将程序集引用添加到项目的根Web.config文件中,这对我的情况没有帮助.之后我对Web.config文件做了同样的事情,该文件位于我的ASP.NET MVC项目的Views 文件夹中:Views\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>