该项目是一个ASP.NET MVC网络应用程序,目标是.NET框架4.6.1.

突然之间(一些NuGet软件包升级了),我在运行时开始出现以下错误:

CS0012:类型"系统".对象""是在未定义的程序集中定义的

在我的主视图Index.cshtml中,在我使用@Html.ActionLink的行中

我的机器上确实安装了.NET Core SDK 2.0和.NET Framework 4.7.1,但我不想包含对它的引用.这只是一个.NET Framework web应用,它托管在Windows IIS上,其中安装的框架是4.6.1,服务器中没有安装Net Core.

那么,为什么它要求在netstandard中添加一个参考?我如何在不引用netstandard而不引用完整窗口的情况下修复它.NET Framework 4.6.1?

我已经判断了以前的提交,它工作正常,但是我仍然收到这个错误.所以这与升级NuGet包无关.我的本地开发机器上好像有什么东西.

如果用户将应用程序发布到一个目录,并使用IIS运行它,它就会工作.

Link to .csproj gist

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net46" />
  <package id="BundleTransformer.Core" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Handlebars" version="1.9.73" targetFramework="net46" />
  <package id="BundleTransformer.Less" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Yui" version="1.9.52" targetFramework="net46" />
  <package id="Dapper" version="1.42" targetFramework="net46" />
  <package id="EcmaScript.Net" version="1.0.1.0" targetFramework="net46" />
  <package id="EntityFramework" version="6.0.0" targetFramework="net46" />
  <package id="Glimpse" version="1.8.6" targetFramework="net46" />
  <package id="Glimpse.AspNet" version="1.9.2" targetFramework="net46" />
  <package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.Core" version="1.2.4" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.V8" version="1.3.0" targetFramework="net46" />
  <package id="jQuery" version="2.1.3" targetFramework="net46" />
  <package id="jQuery.Validation" version="1.13.1" targetFramework="net46" />
  <package id="LowercaseDashedRoute" version="1.0.14" targetFramework="net46" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Moment.js" version="2.10.2" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
  <package id="NWebsec" version="5.1.1" targetFramework="net46" />
  <package id="NWebsec.Core" version="2.1.0" targetFramework="net46" />
  <package id="NWebsec.Mvc" version="5.1.1" targetFramework="net46" />
  <package id="Owin" version="1.0" targetFramework="net46" />
  <package id="Respond" version="1.4.2" targetFramework="net46" />
  <package id="Sendgrid" version="6.3.0" targetFramework="net46" />
  <package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net46" />
  <package id="Serilog" version="2.6.0" targetFramework="net46" />
  <package id="Serilog.Enrichers.Environment" version="2.1.2" targetFramework="net46" />
  <package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net46" />
  <package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net46" />
  <package id="Serilog.Sinks.Sentry" version="2.1.4" targetFramework="net46" />
  <package id="SerilogWeb.Classic" version="2.1.17" targetFramework="net46" />
  <package id="SharpRaven" version="2.2.0" targetFramework="net46" />
  <package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
  <package id="Twitter.Bootstrap.Less" version="3.3.4" targetFramework="net46" />
  <package id="WebActivatorEx" version="2.0.6" targetFramework="net46" />
  <package id="WebGrease" version="1.6.0" targetFramework="net46" />
  <package id="YUICompressor.NET" version="2.7.0.0" targetFramework="net46" />
</packages>

使用VS2017将应用程序发布到文件系统时,我在输出中收到以下警告:

以下程序集依赖于的某个版本.网

但我在System.Transactions号上面找不到任何东西.我怎么才能搜索引用它的是什么呢?

推荐答案

我认为解决方案可能是this issue on GitHub:

try 在web.config中添加netStandard引用,如下所示:"

<system.web>
  <compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>
  <httpRuntime targetFramework="4.7.1" />

我知道你用的是4.6.1,但 Select .NET 4.7.1具有重要意义,因为较旧的框架版本不完全兼容.NET标准2.0.

我从痛苦的经历中知道这一点,当我介绍.NET标准库我对NUGET包和引用的 destruct 有很多问题.另一个需要考虑的改变是升级到PackageReferences,而不是package.config个文件.

看到this guide,你可能还想要tool to help the upgrade.不过,它确实需要一个最新的VS 15.7版本.

Asp.net相关问答推荐

在 Web.Config 中模拟标签

如何在 ASP.NET 中设置自动实现属性的默认值

在 lambda 表达式中否定 Func

VS2012 中无法识别的标签前缀或设备过滤器asp

SignalR + Autofac + OWIN:为什么 GlobalHost.ConnectionManager.GetHubContext 不起作用?

self 跟踪实体与 POCO 实体

取消选中时 ASP.NET CheckBox 不会触发 CheckedChanged 事件

解析器错误消息:文件/TestSite/Default.aspx.cs不存在

使用实体框架从存储过程中获取数据

Web api 不支持 POST 方法

如何使用 json 将复杂类型传递给 ASP.NET MVC 控制器

什么相当于 ASP.NET 中的 cron 作业(job)?

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

如何在 ASP.NET 下拉列表中添加选项组?

DropDownList AppendDataBoundItems(第一项为空白且无重复项)

如何将数据集转换为数据表

根据条件更改 GridView 行 colored颜色

ASP.NET 中的嵌套中继器

IsMobileDevice 是如何工作的?

在 ASP.NET 中获取服务器的 IP 地址?